【问题标题】:GL_SHORT as texture coordinatesGL_SHORT 作为纹理坐标
【发布时间】:2012-02-10 11:18:56
【问题描述】:

Instruments 鼓励我使用 GL_SHORTs 作为纹理坐标。我对只需要值 0 和 1 的四边形执行此操作。

如果短路的精度足够,我是否也可以将 GL_SHORT 用于需要介于 0 和 1 之间的值的其他情况?如果有怎么办?

【问题讨论】:

    标签: iphone opengl-es textures


    【解决方案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);
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2015-06-29
      • 1970-01-01
      相关资源
      最近更新 更多