我在使用 GLshort 表示顶点和法线时遇到问题

发布于 2024-09-01 03:46:27 字数 949 浏览 6 评论 0原文

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

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

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

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

关于在 iPhone 上加速 OpenGL ES 1.1

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

如何同时对顶点和法线使用“短”?我已经尝试了这个和那个大约一整天,但到目前为止我只能选择“带有字节法线的浮动顶点”或“带有浮动法线的短顶点”。

我们将非常感谢您的帮助。

As my project gets close to optimization stage, I notice that reducing Vertex Metadata could vastly improve the performance of 3D rendering.

Eventually, I've dearly searched around and have found following advices from stackoverflow.

Using GL_SHORT instead of GL_FLOAT in an OpenGL ES vertex array

How do you represent a normal or texture coordinate using GLshorts?

Advice on speeding up OpenGL ES 1.1 on the iPhone

Simple experiments show that switching from "FLOAT" to "SHORT" for vertex and normal isn't tough, but what troubles me is when you're to scale back verticies to their original size (with glScalef), normals are multiplied by the reciprocal of the scale. Natural remedy for this is to multiply the normals w/ scale before you submit to GPU. Then, my short normals almost become 0, because the scale factor is usually smaller than 0. Duh!

How do you use "short" for both vertex and normal at the same time? I've been trying this and that for about a full day, but I could only go for "float vertex w/ byte normal" or "short vertex w/ float normal" so far.

Your help would be truly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨落星ぅ辰 2024-09-08 03:46:28

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

glEnable( GL_NORMALIZE );

它并不理想,因为归一化可能会对 GPU 造成一些影响,但这实际上取决于您的瓶颈是由于将数据传递到 GPU 还是由于 GPU 执行过多操作造成的。与任何优化一样,您需要找出哪个可以提供更好的速度。我怀疑你可能会因为传递顶点数据而减慢速度,所以你会得到加速。

Can't you just Normalise your normals by calling this?

glEnable( GL_NORMALIZE );

Its not ideal because normalising will likely hit the GPU a bit but it really depends on if your bottleneck is caused by the passing data to the GPU or by the GPU doing too much. As with any optimisation you need to figure out which gives the better speed up. I'd suspect you are probably slowed down by passing the vertex data so you WILL get a speed up.

无声静候 2024-09-08 03:46:28

可能要尝试的事情:

  • 尝试通过摆弄 GL_NORMAL 矩阵来抵消缩放
  • 使用顶点着色器来执行计算,因为您希望
  • 不要缩小顶点数据,而是放大相机矩阵

Possible things to try:

  • try to counter the scaling by fiddling with the GL_NORMAL matrix
  • use a vertex shader to perform the calculations as you wish
  • don't scale your vertex data down, enlarge your camera matrices instead
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文