当前位置:文档之家› 基于OpenGL的三维建模技术【精选】

基于OpenGL的三维建模技术【精选】

Байду номын сангаас
模型的平移与旋转
平移变换
void glTanslate{fd}(TYPE x, TYPE y, TYPE z); 旋转变换
void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z);
模型总是在原点处绘制完成以后,再通过适 当的平移变换和旋转变换到恰当的空间位置。
上色和纹理贴图
现实世界中的物体 表面往往有各种纹理, 因此要绘制逼真的三 维模型,除了对模型 进行光照处理外,还 需要加上纹理贴图, 使物体看起来更真实。
3. OpenGL编程的基本方法
1. 利用GLUT实现 2. 利用MFC实现 3. 高级图像库
1 利用GLUT实现
因为 OpenGL独立于任何窗口系统 和操作系统之外。所以OpenGL不能直 接用来打开窗口以及从键盘或鼠标读 取事件。GLUT库简化Windows窗口操 作,它提供了非常简单的方法来实现 窗口操作。
透视投影
取景体是一个 截头锥体,在这 个体积内的物体 这个锥体的顶点 也就是视点的位 置。
void gluPerspective(fovy,aspect,zNear,zFar)
正交投影
取景体是一 个各面均为矩 形的六面体
void glOrtho(left,right,bottom,top,near,far)
需要特别指出的是,实际的变换顺序与 指定的顺序是相反的。
程序代码顺序: 旋转变换 平移变换 绘制模型
实现顺序: 绘制模型 平移变换 旋转变换
原始模型
先平移,再旋 转45度
先旋转45度 再平移
光照
为了增强模型的 立体效果,可以给 场景加入光源。
无光源 有光源 OpenGL将光线分为辐射光、环境光、漫反射光 和镜面反射光 4 种独立的成分。
视点变换:确定视点的位置和方向。
投影变换:定义一个视景体,使得视景体外多余的 部分裁剪掉 ,确定视野范围。
模型变换:对模型进行平移,旋转和缩放处理。
视点变换
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基本原理
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);
基于OpenGL的三维 建模技术
王鹏
目录
1 . 三维显示的基本方法 2. OpenGL基本原理 3. OpenGL编程的基本方法
1 . 三维显示的基本方法
三维显示就是将立体图像以平面投影图或 透视图的形式在平面上表现出来的过程。
三维显示的理论基础是计算机图形学。 实现的主要方法: DirectX 和OpenGL两个函数库。 DirectX是微软独自开发的API。DirectX由显示部 分、声音部分、输入部分和网络部分四大部分组 成。 OpenGL “开放图形库”,由SGI公司开发,主要 针对3D图像处理。它与硬件无关,并且独立于操 作系统之外。
glEnd();
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);//设置键盘回调函数 glutMainLoop();//进入主循环
投影变换
由于显示器只能用二维图象显示三维物 体,因此就要靠投影来降低维数。
投影变换的目的就是定义一个视景体, 使得视景体外多余的部分裁剪掉,最终绘 制图像的只是视景体内的有关部分。投影 包括透视投影(Perspective Projection)和正 交投影(Orthographic Projection)两种。
透视投影
正交投影
无论离物视体点距近视的点物多体远大,,投离影视后点的远物的体物大体小小不。变。
建立模型
任何复杂的图形都是由基本的图元点、线和多 边形组成的。 glBegin(…); ……//描述一组顶点,用于建构某种几何对象 glEnd();
例如: glBegin(GL_LINES) //画线
glVertex2f(0.0,0.0,0.0); glVertex2f(1.0,1.0,1.0); glEnd();
三维显示和 摄影类似
相机镜头 三角架 视野大小 景物
视点 视点位置 视景体 模型
在实际摄影拍摄时,我们可以改变拍摄位置和角 度,相机的焦距,改变景物的位置等等。
在OpenGL中,提供对应的函数来实现这些功能。 这些函数(也称为变换)是通过矩阵计算来实现的。 同时,OpenGL是一个状态机,设置了某种状态而 不改变,OpenGL将一直保持这个状态。
相关主题