精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明出处:锐英源,www.wisestudy.cn,孙老师作品,联系电话13803810136。
OpenGL大名鼎鼎,功能强,但是初学者学起来累,很难找到直观的效果来建立学习感觉。cadsurf开源项目是一个集成的非交互式的图形演示平台,也有一些基本的交互功能,比如投影观察、移动、放大缩小、旋转和镜像等等。演示的图形有集成复杂的,比如柱面、嵌线和管道等等,也有简单的点和线等等。这里有对作者原文的翻译,请点击查看。
cadsurf里的类分为2类:图元类和OpenGL实现类,图元类在工程VKGeom里,OpenGL实现类在VKGraphic工程里。这里只介绍VKGeom工程里的类:
CArc:圆弧类,只是实现了某个面的圆弧绘制。功能不全。
CAxisSystem:从某点出发的向量类。
CBasicSurface:基础面。
CBezierCurve:贝塞尔曲线。
CCircle3D:圆形。
CCurve:曲线基类。
CCylinder:柱面。
CEllipse3D:椭圆。
CLine3D:线。
CPlane:平面。
CPoint3D:点。
CVector3D:向量。
我在使用cadsurf开发软件时,创新出绘制圆弧的2个方法,非常有效。有这方面需要的朋友请联系QQ交流。有偿合作。
这里开源出绘制三维空间的坐标刻度面和刻度线的代码,请大家学习,如果代码不理解,请加QQ交流。
void CDrillchartDoc::DrawScale()//画刻度
{
CPoint3D pori(0,0,0),pyminus(0,-CS_SCALE,0);
CPoint3D pxplus(CS_SCALE,0,0);
CPoint3D pxdeep(CS_SCALE,0,CS_SCALE);
CPoint3D pydeep(0,-CS_SCALE,CS_SCALE);
//ZO-Y面
CPlane pzo_y=CPlane::YOZ();
pzo_y.Translate(-1000,-(CS_SCALE/2-500),CS_SCALE/2);//向X轴负方向移动,表示让X轴支持负坐标
CGLPlane *plzo_y =new CGLPlane(pzo_y,CS_SCALE,CS_SCALE+1000);//厚度加1000,表示向Y轴正方向多点面
dContext->Display(plzo_y);
delete plzo_y;
//ZOX面
CPlane pzox=CPlane::ZOX();
pzox.Translate(CS_SCALE/2-500,1000,CS_SCALE/2);//向Y方向正向移动
CGLPlane *plzox =new CGLPlane(pzox,CS_SCALE,CS_SCALE+1000);
dContext->Display(plzox);
delete plzox;
//Z底面
CPoint3D pzd(0,0,CS_SCALE);
CPlane pld(pzd,pxdeep,pydeep);
pld.Translate(CS_SCALE/2-500,-CS_SCALE/2+500,0);
CGLPlane *pgld =new CGLPlane(pld,CS_SCALE+1000,CS_SCALE+1000);
pgld->SetMaterial(CHROME);
dContext->Display(pgld);
delete pgld;
//圆点线
CLine3D lrd(pori, CPoint3D(0,0,3000));
CGLCurve* prd= new CGLCurve(&lrd);
prd->SetColor(255,255,255);
dContext->Display(prd);
delete prd;
//Y轴刻度线
CPoint3D prori(0,1000,0);
CLine3D lyaxis(prori, pyminus);
lyaxis.Translate(-1000,0,0);
CGLCurve* pyaxis = new CGLCurve(&lyaxis);
pyaxis->SetColor(255,255,255);
dContext->Display(pyaxis);
delete pyaxis;
for(int i=(-CS_SCALE/10+1000);i>=-CS_SCALE;i-=CS_SCALE/10)
{
CPoint3D py(-120, i, -80);
py.Translate(-1000,0,0);
CString str;
str.Format("%d",i);
CGLFont *myFont1 = new CGLFont((LPCTSTR)str, py);
dContext->Display(myFont1);
}
//X轴刻度线
CPoint3D pr2ori(-1000,0,0);
CLine3D lxaxis(pr2ori, pxplus);
lxaxis.Translate(0,1000,0);
CGLCurve* pxaxis = new CGLCurve(&lxaxis);
pxaxis->SetColor(255,255,255);
dContext->Display(pxaxis);
delete pxaxis;
for(i=(CS_SCALE/10-1000);i<=CS_SCALE;i+=CS_SCALE/10)
{
CPoint3D px(i, 60, 0);
px.Translate(0,1000,0);
CString str;
str.Format("%d",i);
CGLFont *myFont1 = new CGLFont((LPCTSTR)str, px);
dContext->Display(myFont1);
}
//Z轴刻度线
CLine3D lxv(pxplus, pxdeep);
lxv.Translate(0,1000,0);
CGLCurve* pxv = new CGLCurve(&lxv);
pxv->SetColor(255,255,255);
dContext->Display(pxv);
delete pxv;
for(i=CS_SCALE/10;i<=CS_SCALE;i+=CS_SCALE/10)
{
CPoint3D px(CS_SCALE, 60, i);
px.Translate(0,1000,0);
CString str;
str.Format("%d",i);
CGLFont *myFont1 = new CGLFont((LPCTSTR)str, px);
dContext->Display(myFont1);
}
CLine3D lyv(pyminus, pydeep);
lyv.Translate(-1000,0,0);
CGLCurve* pyv = new CGLCurve(&lyv);
pyv->SetColor(255,255,255);
dContext->Display(pyv);
delete pyv;
for(i=CS_SCALE/10;i<=CS_SCALE;i+=CS_SCALE/10)
{
CPoint3D px(-60, -CS_SCALE, i);
px.Translate(-1000,0,0);
CString str;
str.Format("%d",i);
CGLFont *myFont1 = new CGLFont((LPCTSTR)str, px);
dContext->Display(myFont1);
}
}
cadsurf是英文界面的,不太好用。我这里开源出移植到中文环境下的cadsurf例子,请大家下载学习。