【发布时间】:2011-08-17 13:41:53
【问题描述】:
我正在使用 VBO 创建一个应用程序来渲染一些颜色结构复杂的对象。我注意到,VBO 定义元素的颜色等于元素缓冲区中的最后一个顶点索引。例如,当我像这样使用点数组时
double pointBuf[]={ -0.1d, 0.1d, 0,
0.1d, 0.1d, 0,
0.1d, -0.1d, 0};
颜色数组:
double colorBuf[] = { 0d, 1d, 0d,
0d, 1d, 0d,
1d, 0d, 0d};
和元素数组:
int elementBuf[] = {0, 1, 2};
绘制一个三角形,它将是红色的(因为 elementBuf 中的最后一个元素是 2,在 colorBuf 中它匹配红色)。
事实上,正确绘制所有内容可能会导致额外的内存使用。
还有其他可能的方式将颜色与元素联系起来吗?
【问题讨论】:
-
你的颜色真的需要双色吗?如果您的内存不足,请使用 GL_UNSIGNED_BYTE 作为颜色缓冲区,因此 R、G、B、A 总共需要 4 个字节,而不是像您的实现那样占用 24 个字节(如果我正确理解了您的代码)。您的顶点位置也不需要双打。只需对除颜色以外的所有内容使用浮点数。
-
这只是一个例子,我真的不需要双倍的颜色,我知道。但是由于我在小区域内使用大量顶点进行操作,所以我确实需要这样的精度,所以我必须对顶点使用双精度。还是谢谢
-
user898722:我编辑了您的问题以使其更易于理解。请检查我没有因此引入一些错误。 (随时恢复我的编辑。)
-
如果你对任何顶点属性使用双精度,你也可以丢掉性能。仅在 GL 4.x 中支持属性的双精度数,即使在那时,性能也会大大降低。浮点数的精度约为 7 位。小和大与浮点值是相对的,所以除非你真的发现问题,否则坚持使用浮点数。
-
在询问 OpenGL 相关问题时,请始终指定您的 OpenGL 版本。