GL_SHORT作为纹理坐标

han*_*nno 0 iphone textures opengl-es

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

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

Mār*_*iko 5

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

要指定介于0和1之间的某个值,请使用带缩放的纹理矩阵(如果使用GLES1),或者只使用片段着色器中的纹理坐标和适当的缩放均匀(如果您使用的是GLES2).

这是GLES1的一个简单示例 - 让我们说你的纹理是100x200,你不需要指定纹理坐标,精度低于1 texel.然后,您可以设置纹理矩阵以缩放以下因子 - 1/100和1/200:

glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
glScalex(65536/100, 65536/200, 1);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

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

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