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

标签 iphone performance graphics opengl-es

许多关于提高 iPhone 游戏性能的建议都围绕着向 GPU 发送更少的数据。明显的建议是尽可能使用 GLshorts 而不是 GLfloat,例如顶点、法线或纹理坐标。

使用 GLshort 作为法线坐标或纹理坐标时有哪些具体细节?使用 GLshort 时是否可以表示 0.5 的 GLfloat 纹理坐标?如果是这样,你该怎么做?它只是 SHRT_MAX/2 吗?也就是说,当使用 GLshort 纹理坐标时,GLfloat 的 0 到 1 范围是否映射到 0 到 SHRT_MAX?

法线呢?我总是使用 GLfloats 创建法线并将它们标准化为单位长度。当使用 GLshort 作为法线时,您是否将非标准化向量发送到 GPU?如果是这样,何时以及如何标准化?除以所有分量除以 SHRT_MAX?

最佳答案

OpenGL ES 1.1规范指出,使用整数类型时,法线会自动恢复到 [-1:1] 或 [0:1] 范围。 (完整的公式列表参见规范表2.7)

(for shorts)   n_x = (2c +1)/(2^16 − 1)

所以你不需要依赖 GL_NORMALIZE 来获取法线(并且可以使用你想要的任何技巧)。

但是纹理坐标不会缩放([0:1]范围之外的值完全有效......)。如果您想应用这样的缩放,最好的选择是使用纹理坐标矩阵,但代价相当大。

glMatrixMode(GL_TEXTURE);
glLoadMatrix(matrix_that_does_conversion_based_on_type);

关于iphone - 如何使用 GLshorts 表示法线坐标或纹理坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412169/

相关文章:

java final 变量和性能

sql - 如何简化嵌套SQL交叉连接?

php - 图形/ Canvas /div的动态改变

iphone - 将 UIView 的 subview 放在其 CALayer 前面?

ios - UITableView:在 iOS 10 中可能在点击/更新和删除行后禁用滚动和滑动手势

java - 计算出现次数的最有效方法?

matlab - MATLAB中如何控制点删除?

iphone - _CDSnapshot_[entityName]_ 的多个实例

iPhone Mapkit 向注释添加自定义图像和图钉

math - 基于离散高度函数对网格内点的高度进行插值