基于OpenGL的三维建模技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需要特别指出的是,实际的变换顺序与 指定的顺序是相反的。
程序代码顺序: 旋转变换 平移变换 绘制模型
实现顺序: 绘制模型 平移变换 旋转变换
原始模型
先平移,再旋 转45度
先旋转45度 再平移
光照
为了增强模型的 立体效果,可以给 场景加入光源。
无光源 有光源 OpenGL将光线分为辐射光、环境光、漫反射光 和镜面反射光 4 种独立的成分。
三维显示和 摄影类似
相机镜头 三角架 视野大小 景物
视点 视点位置 视景体 模型
在实际摄影拍摄时,我们可以改变拍摄位置和角 度,相机的焦距,改变景物的位置等等。
在OpenGL中,提供对应的函数来实现这些功能。 这些函数(也称为变换)是通过矩阵计算来实现的。 同时,OpenGL是一个状态机,设置了某种状态而 不改变,OpenGL将一直保持这个状态。
return 0;
}
glBegin(GL_TRIANGLES); glColor3f(1.0,1.0,1.0); glVertex3f(-1,-1,0.0); glColor3f(0.0,1.0,0.0); glVertex3f(1,0.0,0.0); glColor3f(0.0,0.0,1.0); glVertex3f(0.0,1,0.0);
投影变换
由于显示器只能用二维图象显示三维物 体,因此就要靠投影来降低维数。
投影变换的目的就是定义一个视景体, 使得视景体外多余的部分裁剪掉,最终绘 制图像的只是视景体内的有关部分。投影 包括透视投影(Perspective Projection)和正 交投影(Orthographic Projection)两种。
模型的平移与旋转
平移变换
void glTanslate{fd}(TYPE x, TYPE y, TYPE z); 旋转变换
void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z);
模型总是在原点处绘制完成以后,再通过适 当的平移变换和旋转变换到恰当的空间位置。
透视投影
正交投影
无论离物视体点距近视的点物多体远大,,投离影视后点的远物的体物大体小小不。变。
建立模型
任何复杂的图形都是由基本的图元点、线和多 边形组成的。 glBegin(…); ……//描述一组顶点,用于建构某种几何对象 glEnd();
例如: glBegin(GL_LINES) //画线
glVertex2f(0.0,0.0,0.0); glVertex2f(1.0,1.0,1.0); glEnd();
glEnd();
2 利用MFC实现
MFC是一种应用程 序框架。我们可以利 用它非常快速的开发 Windows程序。简单的 说,MFC是Win API与 C++的结合。它具有 完善的消息处理机制。
3 高级图形库
OpenGL提供的功能是比较基本和底层,直接利用 OpenGL来构建复杂的3D图像是很困难的。在 OpenGL的基础上还有Open Inventor、Cosmo3D、 Optimizer等多种高级图形库,来适应不同应用。 Open Inventor 广泛地应用于机械工程设计与仿真、 医学和科学图像、地理科学、石油钻探、虚拟现实 、科学数据可视化等领域。
上色和纹理贴图
现实世界中的物体 表面往往有各种纹理, 因此要绘制逼真的三 维模型,除了对模型 进行光照处理外,还 需要加上纹理贴图, 使物体看起来更真实。
3. OpenGL编程的基本方法
1. 利用GLUT实现 2. 利用MFC实现 3. 高级图像库
1 利用GLUT实现
因为 OpenGL独立于任何窗口系统 和操作系统之外。所以OpenGL不能直 接用来打开窗口以及从键盘或鼠标读 取事件。GLUT库简化Windows窗口操 作,它提供了非常简单的方法来实现 窗口操作。
GLUT和Open Inventor对比
GLUT
Open Inventor
汇报完毕,请批评指正
透视投影
取景体是一个 截头锥体,在这 个体积内的物体 这个锥体的顶点 也就是视点的位 置。
void gluPerspective(fovy,aspect,zNear,zFar)
正交投影
取景体是一 个各面均为矩 形的六面体
void glOrtho(left,right,bottom,top,near,far)
基于OpenGL的三维 建模技术
王鹏
目录
1 . 三维显示的基本方法 2. OpenGL基本原理 3. OpenGL编程的基本方法
1 . 三维显示的基本方法
三维显示就是将立体图像以平面投影图或 透视图的形式在平面上表现出来的过程。
三维显示的理论基础是计算机图形学。 实现的主要方法: DirectX 和OpenGL两个函数库。 DirectX是微软独自开发的API。DirectX由显示部 分、声音部分、输入部分和网络部分四大部分组 成。 OpenGL “开放图形库”,由SGI公司开发,主要 针对3D图像处理。它与硬件无关,并且独立于操 作系统之外。
int main(int argc, char** argv)
{ glutInit(&argc, argv);//初始化GLUT
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(640, 480); //设置窗口大小 glutInitWindowPosition(0, 0);//设置窗口起始位置 glutCreateWindow("Basic");//设置窗口标题 init();//初始化OpenGL glutDisplayFunc(display);//设置显示回调函数 glutReshapeFunc(reshape);//设置重绘回调函数 glutKeyboardFunc(keyboard);//设置键盘回调函数 Байду номын сангаасlutMainLoop();//进入主循环
视点变换:确定视点的位置和方向。
投影变换:定义一个视景体,使得视景体外多余的 部分裁剪掉 ,确定视野范围。
模型变换:对模型进行平移,旋转和缩放处理。
视点变换
void gluLookAT ( GLdouble eyex, GLdouble eyey, GLdouble eyez,//视点 GLdouble cx, GLdouble cy, GLdouble cz, //目标点 GLdouble upx, GLdouble upy, GLdouble upz,//视点朝上的方向 )
相比之下,OpenGL更容易被初学者掌握。
三维显示在地球物理方面的应用:
三维可视化软件有:Landmark EarthCube 模块和 GeoProbe模块,GeoFrame,Paradigm VoxelGeo等等。实际上,三维显示功能已经 成为大型地学软件不可或缺的一部分。
2. OpenGL基本原理