许多关于提高 iPhone 游戏性能的建议都围绕着向 GPU 发送更少的数据而展开。明显的建议是尽可能使用 GLshorts 而不是 GLfloat,例如对于顶点、法线或纹理坐标。
使用 GLshort 作为法线坐标或纹理坐标时有哪些细节?使用 GLshort 时是否可以表示 0.5 的 GLfloat 纹理坐标?如果是这样,你该怎么做?它只是 SHRT_MAX/2 吗?也就是说,当使用 GLshort 纹理坐标时,GLfloat 的 0 到 1 范围是否映射到 0 到 SHRT_MAX?
那正常人呢?我总是使用 GLfloats 创建法线并将它们标准化为单位长度。当使用 GLshort 作为法线时,您是否将非标准化向量发送到 GPU?如果是这样,何时以及如何标准化?除以所有分量除以 SHRT_MAX?
The OpenGL ES 1.1 http://www.khronos.org/registry/gles/specs/1.1/es_full_spec_1.1.12.pdf规范规定,使用整数类型时,法线会自动恢复到 [-1:1] 或 [0:1] 范围。
(完整的公式列表参见规范表2.7)
(for shorts) n_x = (2c +1)/(2^16 − 1)
所以你不需要依赖 GL_NORMALIZE 来获取法线(并且可以使用你想要的任何技巧)。
然而纹理坐标确实not进行缩放([0:1]范围之外的值完全有效......)。如果您想应用这样的缩放,最好的选择是使用纹理坐标矩阵,但代价相当大。
glMatrixMode(GL_TEXTURE);
glLoadMatrix(matrix_that_does_conversion_based_on_type);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)