根据所需的纹理大小计算UV坐标

时间:2014-01-10 22:17:42

标签: opengl glsl

假设我有一个由4个顶点组成的无纹理平面。顶点的UV坐标如下:

(0,0)------------------(1,0)
  |                      |
  |                      |
  |                      |
  |                      |
(0,1)------------------(1,1)

我也有纹理,我希望这个纹理占据平面上水平空间的X%和垂直空间的Y%。如何计算顶点着色器中的uv坐标以允许这些任意数字?

据我所知,如果我想要纹理(50%,50%),我需要制作uvCoords * 2f,如果我想要(200%,200%)那么我需要{ {1}},但如何为任何数字执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以随时按比例缩放坐标:

uvCoords / vec2 (X/100.0, Y/100.0)

以百分比形式取X和Y,然后将uvCoords的各个分量除以X和Y的小数表示。

但是,目前尚不清楚您在这里使用的OpenGL版本,无论是固定功能管道还是GLSL。如果它是固定功能,你还可以考虑另一种称为纹理矩阵的东西。您可以使用glScalef (...)设置缩放矩阵,而矩阵模式为GL_TEXTURE,而不是在设置顶点时执行此计算。只需确保重置该矩阵,否则您将缩放所有纹理坐标。

用户纹理矩阵也可用于转换GLSL中的纹理坐标,但设置可能比我最初建议的更乏味。如果除了缩放之外还想旋转或平移这些坐标,那么我可能会建议使用纹理矩阵。