我正在努力研究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);
在将此矩阵发送到着色器之前,是否必须对此矩阵进行一些数学运算?如果是这样的话?对于大多数人来说,我觉得我错过了一些明显的东西。
答案 0 :(得分:2)
你的矩阵可能是错的。假设其他一切设置正确,这将是正确的矩阵:
GLfloat vMatrix[] = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
-0.5f, -0.5f, 0.0f, 1.0f,
};