3

随着我的项目接近优化阶段,我注意到减少顶点元数据可以极大地提高 3D 渲染的性能。

最终,我仔细搜索并找到了来自 stackoverflow 的以下建议。

在 OpenGL ES 顶点数组中使用 GL_SHORT 而不是 GL_FLOAT

您如何使用 GLshorts 表示法线或纹理坐标?

在 iPhone 上加速 OpenGL ES 1.1 的建议

简单的实验表明,将顶点和法线从“FLOAT”切换到“SHORT”并不困难,但让我烦恼的是,当您将顶点缩小到其原始大小时(使用 glScalef),法线乘以倒数的规模。对此的自然补救措施是在提交给 GPU 之前将法线与比例相乘。然后,我的短法线几乎变成了 0,因为比例因子通常小于 0。Duh!

如何同时对顶点和法线使用“短”?我一直在尝试这个和那个大约一整天,但到目前为止我只能选择“float vertex w/ byte normal”或“short vertex w/ float normal”。

您的帮助将不胜感激。

4

2 回答 2

1

你不能通过调用这个来标准化你的法线吗?

glEnable( GL_NORMALIZE );

它并不理想,因为标准化可能会对 GPU 造成一点影响,但这实际上取决于您的瓶颈是由将数据传递到 GPU 还是由 GPU 做的太多引起的。与任何优化一样,您需要弄清楚哪个可以提供更好的速度。我怀疑你可能会因为传递顶点数据而减慢速度,所以你会加快速度。

于 2010-05-14T07:36:41.497 回答
0

可能要尝试的事情:

  • 尝试通过摆弄 GL_NORMAL 矩阵来对抗缩放
  • 使用顶点着色器根据需要执行计算
  • 不要缩小你的顶点数据,而是放大你的相机矩阵
于 2010-05-14T08:59:25.830 回答