65.9K
CodeProject 正在变化。 阅读更多。
Home

基本曲线和曲面建模器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (36投票s)

2003年2月18日

CPOL

3分钟阅读

viewsIcon

270424

downloadIcon

16493

一个用OpenGL建模曲线和曲面的基本演示。

Sample Image - CadSurf.jpg

引言

这是一个使用MFC和OpenGL在VC6上制作的基本曲面建模器。 几何接口和图形接口是分开的,因此您可以简单地定义您的曲线或曲面,而无需担心显示。 显示采用通用形式,即,如果您从`CCurve`派生自己的曲线并覆盖`PointAtPara`和`NormalAt`方法以及其他必需方法,则可以创建OpenGL曲线,如下所示

在您的项目文件的某个地方,您创建自己的派生类的头文件和源文件...

//header file
#include "Curve.h"
class myCurve : public CCurve
{
....
};

//cpp file
#include "myCurve.h"
CPoint3D myCurve::PointAtPara(double upar)
{
  double x, y, z;
  x = 2*sin(uPar)......
  y = .......
  z = .....
  CPoint3D P(x,y,z);
  return P;
}

在您的`CDocument`代码的某个地方...

#include "myCurve.h"
void CMyProjDoc::OnCurve()
{
    myCurve crv(...);
    CGLCurve* myglCurve = new CGLCurve(&crv)
    dContext->Display(myglCurve);
    delete myglCurve;
}

现在`dContext`是显示上下文对象(`CGLDisplayContext`),它管理所有显示功能,因此它是在文档的构造函数中创建的。 曲面也是如此。 目前几乎所有通用曲线和曲面都已实现。 曲线有:直线、圆、椭圆、抛物线、双曲线、贝塞尔曲线和bspline曲线。 曲面有:平面、圆柱体、圆锥体、球体、环面、拉伸、旋转、直纹和管状。

所有曲线的显示由`CGLCurve`类管理,曲面的显示由`CGLSurface`类管理。 点和其他几何辅助工具(如轴、坐标系等)也被建模。 这是在非交互模式下实现的,用于演示。 您可以修改源文件以创建交互式应用程序。

2003年2月23日,在`CGLView`类(OpenGL查看的基本类)中进行了一些修改。 以前它是从`CView`派生的,而`CCadSurfView`类是从`CGLView`派生的。 OpenGL操作方法是从`CCadSurfView`类的方法中调用的。 例如,鼠标实现等。 像这样:`CGLView::RotateView()`。 不知何故,我觉得OpenGL视图没有隔离。 因此,通过更好的面向对象方法,我使`CGLView`类成为一个独立的类,并且类的构造函数被传递给`CWnd`的指针。 `CGLView`中的私有数据成员是指向`CWnd`的指针,该指针在c'tor中用OpenGL设置初始化。 现在,此`CGLView`的对象是`CCadSurfView`类的私有成员,它在`CCadSurfView`的`OnCreate()`方法中动态初始化,并在`OnDestroy()`方法中删除。 现在使用`CGLView`类的对象调用这些方法,而不是直接将其作为基类方法调用--像这样

CCadSurfView::OnCreate(...)
{
  myView = new CGLView(this, GetDocument()->DisplayContext());
}

void CCadSurfView::OnMouseMove(...)
{
  .....
  myView->RotateView(....);
}

void CCadSurfView::OnSize(...)
{
  ...
  myView->Resize(cx, cy);
  CCadSurfView::OnSize.....
  ...
}

...CCadSurfView::OnDestroy(...)
{
  ...
  delete myView;
  ...
}

而当它以前是从`CView`派生的时候,调用是这样的

void CCadSurfView::OnMouseMove(...)
{
  ...
  CGLView::RotateView(...);
  ...
}

此应用程序是在 PIII 800Mhz m/c(配备 256MB RAM、RIVA TNT 32MB VRAM AGP 和 W2K)上开发的。 未在其他平台上测试。 图形处理繁重,需要良好的显卡。 这不仅仅是一个教程,而是一个正在进行的项目开发! 也欢迎投稿。 祝您好运,请让我知道您的评论和建议。 谢谢。

历史

2007年3月27日:我将项目分成两部分

  1. Cadsurf应用程序,
  2. VKernel(*VKGeom.dll* 和 *VKGraphic.dll* DLL)。 现在有两个用于几何和图形的单独的DLL。

2012年4月18日:添加了 VS2008 的解决方案。

添加了用户定义曲面的附加演示,显示了克莱因瓶变体。 CadSurf 项目中的 *UserSurface.h* 和 *.cpp* 文件显示了面向对象编程的实际实现。 还有更多内容!

© . All rights reserved.