GL_SHORT作为纹理坐标

时间:2012-01-14 18:29:58

标签: iphone opengl-es textures

乐器鼓励我使用GL_SHORTs作为纹理坐标。我这样做是为了我只需要值0和1的四边形。

如果短路的精度足够,我还可以将GL_SHORT用于需要0到1之间的值的其他情况吗?如果是这样的话?

1 个答案:

答案 0 :(得分:5)

要获得最大精度,可以使用值0..32767将纹理坐标指定为GL_SHORT,以指定从0.0f到1.0f的值。然后你将得到精度1/32767,大约是0.00003。这对你来说够了吗? - 这取决于您和您的申请。很可能它对你来说已经足够了。

要指定介于0和1之间的某个值,则要么使用带缩放的纹理矩阵(如果使用GLES1),要么在片段着色器中将纹理坐标与适当的缩放均匀相乘(如果您使用的是GLES2)。

这是GLES1的一个简单示例 - 假设您的纹理为100x200,并且您不需要指定纹理坐标,其精度低于1个纹素。然后,您可以设置纹理矩阵以缩放以下因子 - 1/100和1/200:

glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
glScalex(65536/100, 65536/200, 1);
glMatrixMode(GL_MODELVIEW);

在您的顶点数组/缓冲区中,您可以使用:

  • (0,0)指定值(0.0f,0.0f)
  • (10,40)指定值(10 / 100.0f,40 / 200.0f)=(0.1f,0.2f)
  • (100,200)指定值(1.0f,1.0f)。