opengl 更改顶点着色器不会影响

j2datikz  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(148)

在下面的代码中,我期望将gl_Position乘以0.5来改变纹理的位置。但它没有发生。顶点着色器代码:

"uniform mat4 u_MVP;            \n" \
       "attribute vec4 a_Position;     \n" \
       "void main()                    \n" \
       "{                              \n" \
       "   gl_Position = u_MVP   * 0.5  * a_Position;   \n" \
       "}                              \n";

我做错了什么
如何更改顶点着色器?

oxcyiej7

oxcyiej71#

这将x、y、z和w都缩放0.5,这意味着x和y在屏幕上的位置保持不变,因为x除以w,y除以w。例如,1/1等于1,如果将两边减半,则0.5/0.5也等于1,因此没有差异。
相反,您可以使用例如vec4(0.5, 0.5, 0.5, 1.0),以便w不受影响。
我也不确定按这个顺序做乘法是否有意义。我会写为:

gl_Position = (u_MVP * a_Position) * vec4(0.5,0.5,0.5,1.0);

这将使矩阵之后的屏幕坐标减半,从而使整个画面向屏幕中间收缩。
或者你可以在矩阵之前将坐标减半,这通常不会做同样的事情,这取决于你使用的矩阵。在大多数情况下,这会将每个对象缩小到它自己的原点(0,0,0点)。

gl_Position = u_MVP * (a_Position * vec4(0.5,0.5,0.5,1.0));

相关问题