高级图形编程(基于opengl)6

1.5 顶点和顶点数组

除了几种常用的建模基元,OpenGL提供多种方法为每一种基元类型指定顶点和顶点属性。有两种原因:第一提供灵活性,使得更容易匹配模型数据转化为OpenGL渲染管线与应用程序表示的模型(数据结构)。第二个原因是创建更多的方式,减少数据的数量进入图形渲染加速器生成图像——更少的数据表示更好的性能。

例如,一个应用程序可以渲染一个球体嵌入到三角形中。对于每一个三角形顶点,应用程序可以指定顶点位置,颜色,法线向量,和一个或者更多纹理坐标。此外,关于每个点的属性,应用程序可以选择很多元件如(2x,y,3(x,y,z),或者4x,y,z,w)位置,3r,g,b,或者4r,g,b,a)颜色,等等)和每个组件的数据类型:短整型,整型,单精度浮点型,双精度浮点型。

当应用程序作者不考虑性能,可能不需要设置所有的属性,用的最多的属性有(3组的顶点,4组的颜色,3组的纹理坐标等),和更多常用属性。其他顶点数据不是问题,在OpenGL它会直接忽略掉不必要的属性和组件。比如,当光照是关闭的(纹理生成不用法线),则法线向量是被忽略的。当数据是三个值的纹理坐标时,但是只有两个值纹理坐标使用的,因此r坐标是无用的。同理,效果如是阴影面可以通过平面阴影模式,有效的忽略其他顶点法线。

然而,有几个方式影响效率。首先,它增加了内存中更多的模型数据,及应用程序可能存储用于不会用到的属性。第二,它会限制渲染管线的性能,及是应用程序必须处理这些无用的属性和一些处理,然后最后又抛弃不用。因此,编写和调试应用程序去除无用的或者多余的数据。

OpenGL规范的1.1版,减少额外的顶点和顶点属性的方法,叫做顶点数组。这是因为添加数据的方式提高性能;顶点数组减少应用程序指定顶点和它的属性的函数调用的次数。而不是调用函数针对每个顶点和属性,应用程序指定一个指针指向每个属性类型的(顶点,颜色,向量等)。然后,可以发送一个方法调用渲染管线的属性。绘制一个立方体需要12个三角形(2三角形X6个面),然而顶点,颜色和法线向量数据是10812三角形X3顶点X3属性)次调用方法。使用顶点数组,只需要调用4次函数,3次设置顶点,颜色和法线数组地址和1次绘制数组(当启动颜色和法线数组的2次也包括)。立方体可能是6三角形条带,原先设置属性命令函数调用次数至72。减少顶点数组调用的次数为6

辣手的问题,为顶点数组的每一个顶点设置所有的属性。以立方体为例,当立方体的每一个面设置不同的颜色,使用属性方法类型(叫做精细调用)调用6次函数设置颜色。关于顶点数组,36颜色值必须制定,及是颜色必须每一个顶点指定。此外,当原始顶点数量是比较小,总开销是设置顶点数组的启动和关闭可能大于存储调用函数(如例子,当是4个顶点的广告位)。由于这个原因,一些应用程序不惜余力将许多对象合并到一个大的数组里。尽管如此,一个好的方法可能是应用程序绘制简单数据的合理性,可能应用程序的变化而效果不同。例如,一个对象的插入或删除操作需要额外的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值