我正在尝试开发 OpenGL ES 2.0,而且我几乎是一个 OpenGL 新手。我有一个简单的程序,目前只在原点绘制一个红色正方形,我想使用矩阵将其从原点移动到屏幕中心。我相信到目前为止我所做的一切都是正确的,但我必须遗漏一些东西,因为当我将矩阵应用于着色器时,我只是得到一个空白屏幕。
着色器:
const char vShaderStr[] = "attribute vec4 a_position; \n"
"attribute vec4 a_colour; \n"
"varying vec4 v_colour; \n"
"uniform mat4 u_transformation; \n"
"void main() \n"
"{ \n"
" v_colour = a_colour; \n"
" gl_Position = u_transformation * a_position; \n"
"} \n";
const char fShaderStr[] = "varying vec4 v_colour; \n"
"void main() \n"
"{ \n"
" gl_FragColor = v_colour; \n"
"} \n";
创建矩阵并发送到着色器:
transformationMatrix = glGetUniformLocation(programObject, "u_transformation");
...
GLfloat vMatrix[] = {
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.0f, 1.0f,
};
glUniformMatrix4fv(transformationMatrix, 1, GL_FALSE, vMatrix);
在将其发送到着色器之前,我是否必须对这个矩阵进行一些数学运算?如果有怎么办?我觉得我错过了对这里大多数人来说显而易见的东西。