在下面的代码中,我期望将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";
我做错了什么
如何更改顶点着色器?
1条答案
按热度按时间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不受影响。我也不确定按这个顺序做乘法是否有意义。我会写为:
这将使矩阵之后的屏幕坐标减半,从而使整个画面向屏幕中间收缩。
或者你可以在矩阵之前将坐标减半,这通常不会不做同样的事情,这取决于你使用的矩阵。在大多数情况下,这会将每个对象缩小到它自己的原点(0,0,0点)。