文档介绍:Outline 常见的 OpenGL 代码片段建模 Modeling
•层次变换•这样的代码段经常• glLoadIdentity(); •建模是对世界的抽象
计算机图形学•层次建模出现• glTranslate(...); –即指我们生活的真实世界
–例子:机器手• glRotate(...); –也指我们利用程序生成的虚拟世界
Computer Graphics •我们可以总结出更
•场景图• glScale(...);
一般的方法• draw_object(...);
第十二讲层次建模•在计算机图形学领域,我们用几何对
象作为我们这个世界的模型
福州大学软件学院陈昱–选择合适的基本图元
–表示图元之间的相互关系
层次建模定义一个复杂物体定义一个复杂物体层次建模
•三角形,曲线,表面等图元•复杂对象是建立在简单图元的基础上
是复杂的真实世界物体建模 myCube()
的基本构件•从原型到目标创建一个标准正方体,中心在原点
–一个原型拥有一个默认的大小,位置和朝
•层次建模将许多基本图元整向
合成一个复杂的对象集合体–你需要执行模型变换将其放置到场景中
创建一个 2 x x 2 的长方体
需要调用 glScalef(2, , 2)
层次建模实例变换实例变换实例变换表
•不同的材质•从一个原型对象开始•实例变换矩阵:M=TRS •为了存储一个模型,可以在表中为每
•原型(符号)的每一次出现都是模型•实现: 个符号分配一个编号,然后存储下它
的一个实例 glMatrixMode(GL_MODELVIEW); 的实例变换参数
–必须设置位置,大小及朝向 glLoadIdentity();
–实例变换 glTranslatef(dx, dy, dz);
glRotatef(angle, rx, ry, rz);
glScalef(sx, sy, sz);
glutSolidCube(side);
实例变换表的使用 OpenGL 中的图像对象显示列表的使用汽车模型中的部件关系
• glLoadIdentity(); •显示列表(Display List)编译一系列的 int symbol = glGenLists(1); •符号-实例表没有显示模型之间的关系
OpenGL 命令为一个"符号" glNewList(symbol, PILE); •考虑一个汽车模型:
–顶点数据 glBegin(...);
–底盘+ 4 个相同的轮子
•对表中所有的‘i’–变换 glTranslate(...);
–两个符号
glTranslatev(t[i]); –颜色 glVertex(...);
glRotate(r[i]); –法线 glEnd(); •前进速度由轮子的转动速度决定
glScale(s[i]); –… glEndList();
draw_object(symbol[i]); •生成的对象不可再改变,使用显示列
表速度会比直接执行函数稍快 glCallList(symbol); // 调用
汽车动画通过函数调用实现汽车动画问题图 Graph
void render() { •上述代码是一种线性关系