基本曲线和曲面建模器
一个用OpenGL建模曲线和曲面的基本演示。
引言
这是一个使用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日:我将项目分成两部分
- Cadsurf应用程序,
- VKernel(*VKGeom.dll* 和 *VKGraphic.dll* DLL)。 现在有两个用于几何和图形的单独的DLL。
2012年4月18日:添加了 VS2008 的解决方案。
添加了用户定义曲面的附加演示,显示了克莱因瓶变体。 CadSurf 项目中的 *UserSurface.h* 和 *.cpp* 文件显示了面向对象编程的实际实现。 还有更多内容!