网页功能: 加入收藏 设为首页 网站搜索  
OpenGL 入门教程(七)
发表日期:2007-01-22作者:[转贴] 出处:  

OpenGL中的物体是用面边界模型来描述的。我们将物体表面分割成许多个平面,记录面的形状、颜色、纹理,OpenGL根据这些参数再把这些个面绘制出来,我们就能在场景中看到立体的实体了。

物体模型最基本的参数是它的形状,形状可以用表面来记录。而记录面的边缘就能描述面的形状。描述边缘的方法是记录边上所有线段的端点。所以用面边界模型描述物体形状的核心就是记录物体表面所有的顶点。这些顶点按所在边的顺序排列起来就能描述一个平面,许多的平面就能表示一个物体的表面,显然平面越多形状越逼真。

OpenGL中描述一个顶点的方法是指定其坐标和属性,命令是:

glVertex*(Coordination);

该命令以参数指定的坐标和当前颜色、纹理坐标、法向等属性定义一个顶点。

OpenGL中描述一个面的方法是glBegin/glEnd命令组:

glBegin(形状);
glVertex(顶点1);
glVertex(顶点2);
……
glEnd();

OpenGL支持点(GL_POINTS)、线段(GL_LINES)、三角形(GL_TRIANGLES)、四边形(GL_QUADS)、多边形(GL_POLYGON)。可以在一个begin/end对中定义多个同一类型的平面,如在glBegin(GL_TRIANGLES);与glEnd();之间输入11个顶点,则会形成3个三角形,最后两个顶点则被舍弃。

OpenGL还支持平面带(STRIP)和平面扇(FAN)。
扇:在glBegin(GL_TRIANGLE_FAN);/glEnd();间输入若干顶点,则第一个顶点做为共同的顶点,第二、三个做为底边定义一个三角形,此后的每个顶点与前一个顶点做为底边定义一个三角形,所以11个顶点就会定义9个共顶点的三角形,这些三角形将形成一个扇形。
带:输入顶点编号为123456789……;定义的三角形为132 243 354 465 567……,相邻三角形共用一条边,形成一条带状;依此类推,定义的四边形为1243 3465 5687……。
 

实际使用中,可用3ds max/softimage/maya之类的工具以直观的方式建立物体模型保存成文件,然后再用专门的解码工具将模型转换成一系列的顶点。解码工具有三类:插件、工具软件、程序库。目前已经有许多的代码库可以解析多种格式的三维场景,如果还没有合适的还也可以自己编写。

3ds max带有一个简单的.asc导出器,但功能很弱,而3dxexp则强大得多,要是不满意还可以自己写,这就得学习学习MAX SDK了。

使用3ds2c之类的工具将模型转换为C代码是非常简便的一种方法,但从效率方面考虑,并不是最好的,特别是象PolyTrans之类的软件会为每个面生成一个Begin/End,象下面的这个模型,.3ds文件只有978K,而转换得到的.C文件却有6.8M之巨。稍好一点的办法是充分利用STRIP或使用VertexPointer技术,或者利用wc2pov之类的工具将转换后的多边形数据保存在文件中,使用时再调入;还有一种办法就是view3ds所用的将场景转化为编译后的glList保存起来,在使用时装入系统直接调用,速度非常快。


T_FIGHTER(Hight detail)

根本的解决办法还是针对自己的应用设计优化的文件格式,并制作配套的编码、解码库。

处理各种格式三维文件的程序库非常多,到网上随便搜搜就能找到一大把。目前俺最喜欢的是GLScene(类示意图1 2 3),它内建树形场景支持,可解析.3ds文件和.md2文件,可扩展性极好,可惜只有delphi版本。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 OpenGL 入门教程(七)
本类热点文章
  DDraw和D3D立即模式编程手册
  矩阵求逆的快速算法
  本地化支持:OGRE+CEGUI中文输入:OGRE方..
  Direct3D中实现图元的鼠标拾取
  3D场景中的圆形天空顶
  OpenGL显卡编程
  一种高效的基于大规模地形场景的OCCLUS..
  一个完善的读取3DS文件例子
  如何制作一个可控制的人体骨骼模型
  Direct3D 入门之我见
  Slope(斜坡) 法线生成算法,在地形渲染..
  在Direct3D中渲染文字
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00566