【问题标题】:OpenGL ES: Disabling transformation?OpenGL ES:禁用转换?
【发布时间】:2010-06-23 17:09:12
【问题描述】:
This NVIDIA video podcast(过时?)建议绕过 OpenGL 的矩阵堆栈作为性能提示。它还建议绕过 OpenGL 的光照,这意味着他们的意图是手动转换几何图形。出于其他原因,我碰巧这样做了。
当然,除非有办法让 OpenGL 禁用它自己的转换,否则您实际上会从中受益是没有意义的。 AFAIK 没有明确的方法可以做到这一点,视频也没有给出任何提示。
当然,这可以通过将身份加载到 gl 的矩阵中来实现。如果矩阵是恒等式,我是否应该期望一个体面的实现实际上完全跳过转换?
【问题讨论】:
标签:
performance
opengl-es
matrix
【解决方案1】:
它指的是您可以将矩阵推送和弹出到 OpenGL 堆栈。避免做诸如 glTranslate 之类的事情。这样你就可以自己做所有的矩阵乘法等,它肯定不会通过浮点仿真。然后你直接设置矩阵。
至于照明,您可以使用 glDisable 来实现。看起来它们纯粹是使用纹理照明。基本上,您将灯光绘制到环境贴图纹理上。这为您提供了定向灯的效果,您可以添加任意数量的灯光,唯一增加的成本是创建环境贴图。虽然设置环境贴图相当复杂,但它绝对可行并提供非常好的结果(您可以使用类似的技巧来获得漫反射 DOT3 凹凸贴图,可以追溯到 DX6!)
他们可能在谈论在将顶点数据添加到引擎时自己对顶点数据进行光照。即遍历您的法线和位置并使用固定点执行照明计算,然后使用 glColorPointer 将它们传递给 GLES。这是一件非常简单的事情,并且做定向顶点照明很容易(N.L,其中 N 是顶点法线,L 是模型相对空间中的光线方向)。