我试图在顶点着色器中旋转一个纹理。我有一个指向纹理的指针,为了我的目的,它被逆时针旋转了90度。我不希望在调用glTexImage2D()
之前手动旋转纹理。
我只能使用#version 120
。
这是我的原始顶点着色器:
#version 120
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
仅出于测试目的,我以这种方式修改了顶点着色器,但我得到了一个黑屏:
#version 120
const float w = 0.76;
float mat3 A = ( 1, 0, 0,
0, 1, 0,
0, 0, 1 );
attribute vec3 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
A = ( cos(w), -sin(w), 0,
sin(w), cos(w), 0,
0, 0, 1 );
gl_Position = A * vec4(a_position, 1.0f);
v_texCoord = a_texCoord;
}
2条答案
按热度按时间ppcbkaq51#
编译错误。赋值不起作用:
你必须构造一个
mat3
,然后你可以给这个矩阵赋值(另见GLSL Programming/Vector and Matrix Operations):不能将
vec4
与mat3
相乘。必须将vec3
与mat3
相乘我甚至无法想象你对这句话的期望:
正确答案是:
这与以下内容相同:
正确的顶点着色器:
t9aqgxwy2#
我不确定这段代码是否能在120版本中编译,但总体思路是创建一个纹理矩阵。