【发布时间】:2012-02-10 11:18:56
【问题描述】:
Instruments 鼓励我使用 GL_SHORTs 作为纹理坐标。我对只需要值 0 和 1 的四边形执行此操作。
如果短路的精度足够,我是否也可以将 GL_SHORT 用于需要介于 0 和 1 之间的值的其他情况?如果有怎么办?
【问题讨论】:
Instruments 鼓励我使用 GL_SHORTs 作为纹理坐标。我对只需要值 0 和 1 的四边形执行此操作。
如果短路的精度足够,我是否也可以将 GL_SHORT 用于需要介于 0 和 1 之间的值的其他情况?如果有怎么办?
【问题讨论】:
要获得最大精度,您可以使用值 0..32767 将纹理坐标指定为 GL_SHORT 以指定从 0.0f 到 1.0f 的值。然后您将获得精度 1/32767,大约为 0.00003。对你来说够了吗? - 这取决于您和您的应用程序。很可能对您来说已经足够了。
要指定介于 0 和 1 之间的某个值,请使用带缩放的纹理矩阵(如果您在 GLES1 上),或者在片段着色器中将纹理坐标与适当的缩放均匀度相乘(如果您在 GLES2 上)。
这是 GLES1 的一个简单示例 - 假设您的纹理 ir 为 100x200,并且您不需要指定精度低于 1 texel 的纹理坐标。然后,您可以将纹理矩阵设置为针对以下因素进行缩放 - 1/100 和 1/200:
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
glScalex(65536/100, 65536/200, 1);
glMatrixMode(GL_MODELVIEW);
之后,您可以在顶点数组/缓冲区中使用:
【讨论】: