【发布时间】:2011-01-03 04:01:06
【问题描述】:
好吧...假设我有一个相对简单的实体,它有六个不同的法线,但实际上有接近 48 个面(每个方向 8 个面),并且面之间有很多共享顶点。在 OpenGL 中渲染它的最有效方法是什么?
我知道我可以将顶点放在一个数组中,然后使用索引数组来渲染它们,但我必须不断打破我的渲染步骤来更改法线(即设置法线 1...渲染 8 个面.. . 设置法线 2... 渲染 8 个面等)因此我必须维护一个索引数组数组... 每个法线一个!不好!
我可以做到的另一种方法是使用单独的法线和顶点数组(甚至将它们交错),但这意味着法线与顶点的比例需要一对一,这意味着法线将被复制比他们需要的多8倍!在具有球形甚至曲面的物体上,每个法线很可能都是不同的,但对于这个,这似乎真的是在浪费内存。
在一个完美的世界中,我希望我的顶点和法线数组具有不同的长度,然后当我去绘制我的三角形或四边形时,为该顶点指定每个数组的索引。
现在 OBJ 文件格式允许您精确地指定...一个顶点数组和一个不同长度的法线数组,然后当您指定要渲染的面时,您指定一个顶点和一个法线索引(以及如果您也使用纹理,则 UV 坐标)这似乎是完美的解决方案! 48 个顶点但只有 8 个法线,然后是定义形状面的索引对。但我不确定如何在 OpenGL ES 中渲染它(再次注意“ES”。)目前我必须“非规范化”(对不起那里的 SQL 双关语)法线回到 1 对 1顶点数组,然后渲染。只是浪费我的记忆。
有人帮忙吗?我希望我在这里遗漏了一些非常简单的东西。
标记
【问题讨论】:
标签: opengl-es vertex-buffer vertex