锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源技术 / cadsurf开源项目分析和OpenGL三维图形设计基础
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源心得,转载请注明出处:锐英源,www.wisestudy.cn,孙老师作品,联系电话13803810136。


1.简介

OpenGL大名鼎鼎,功能强,但是初学者学起来累,很难找到直观的效果来建立学习感觉。cadsurf开源项目是一个集成的非交互式的图形演示平台,也有一些基本的交互功能,比如投影观察、移动、放大缩小、旋转和镜像等等。演示的图形有集成复杂的,比如柱面、嵌线和管道等等,也有简单的点和线等等。这里有对作者原文的翻译,请点击查看

2.OpenGL三维图形设计基础

  1. cadsurf里的类封装了常用的图元生成代码,使用起来非常方便,但是要能组合起来设计出来复杂图形还是需要掌握三维空间的一些基础。
    比如移位,在cadsurf里可以用Translate函数来进行,这个Translate函数里使用了OpengGL的函数glTranslatef来实现平移功能,平移是指在3个方向上的坐标信息,x、y和z方向上的正向平移,就是用正值,反向平移就是用负值。
    对图元的旋转一定要理解三维向量和角度,否则是很难出效果的。对左手坐标系和右手坐标系方向要理解。

3.cadsurf常用类说明

cadsurf里的类分为2类:图元类和OpenGL实现类,图元类在工程VKGeom里,OpenGL实现类在VKGraphic工程里。这里只介绍VKGeom工程里的类:
CArc:圆弧类,只是实现了某个面的圆弧绘制。功能不全。
CAxisSystem:从某点出发的向量类。
CBasicSurface:基础面。
CBezierCurve:贝塞尔曲线。
CCircle3D:圆形。
CCurve:曲线基类。
CCylinder:柱面。

CEllipse3D:椭圆。
CLine3D:线。
CPlane:平面。
CPoint3D:点。
CVector3D:向量。

4.创新点

我在使用cadsurf开发软件时,创新出绘制圆弧的2个方法,非常有效。有这方面需要的朋友请联系QQ交流。有偿合作。

5.开源片段

这里开源出绘制三维空间的坐标刻度面和刻度线的代码,请大家学习,如果代码不理解,请加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);
}
}

6.源代码下载

cadsurf是英文界面的,不太好用。我这里开源出移植到中文环境下的cadsurf例子,请大家下载学习。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内