Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 根据所需纹理大小计算UV坐标_Opengl_Glsl - Fatal编程技术网

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

Opengl 根据所需纹理大小计算UV坐标,opengl,glsl,Opengl,Glsl,假设我有一个由4个顶点组成的无结构平面。顶点的UV坐标如下所示: (0,0)------------------(1,0) | | | | | | | | (0,1)------------------(1,1) 我还有一个纹理,我希望这个纹理占据平面上X%的水平空间和Y%的垂直空间。如何计算顶点着色器中的uv坐

假设我有一个由4个顶点组成的无结构平面。顶点的UV坐标如下所示:

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


我知道,如果我想让纹理成为平面的(50%,50%),我需要制作
uvCoords*2f
,如果我想(200%,200%),我需要
uvCoords/2f
,但是对于任何数字,如何做到这一点呢?

你总是可以这样缩放坐标:

uvCoords / vec2 (X/100.0, Y/100.0)
这将以百分比表示X和Y,然后将
uvCoords
的各个组件除以X和Y的分数表示

然而,现在还不清楚您在这里使用的是什么版本的OpenGL,是固定函数管道还是GLSL。如果它是固定函数,还有另一件事可以考虑称为纹理矩阵。当矩阵模式为
GL_纹理时,可以使用
glScalef(…)
设置缩放矩阵,而不是在设置顶点时执行此计算。只需确保重置该矩阵,否则将缩放所有纹理坐标


用户纹理矩阵也可以用于在GLSL中变换纹理坐标,不过设置起来可能比我最初建议的更繁琐。如果除了缩放之外,还想旋转或平移这些坐标,那么我建议使用纹理矩阵。

对于任何数字,您都可以这样做,
uvCoords
是一个变量。您的问题是不知道如何将百分比转换为分数吗
uvCoords/vec2(X/100.0,Y/100.0)
将根据X和Y的两个独立百分比缩放纹理坐标。@AndonM.Coleman我想我把头脑中的一切都复杂化了。谢谢你的回答,现在一切如我所料。如果你把它作为一个答案,我会接受的。