1

我正在尝试开发 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);

在将其发送到着色器之前,我是否必须对这个矩阵进行一些数学运算?如果有怎么办?我觉得我错过了对这里大多数人来说显而易见的东西。

4

1 回答 1

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,
};
于 2012-04-27T08:43:03.737 回答