我一直在努力解决我的顶点着色器的问题。我有一个具有以下位置属性的精灵:
sprite->vertices[0][0] = -1.0f;
sprite->vertices[0][1] = +1.0f;
sprite->vertices[1][0] = -1.0f;
sprite->vertices[1][1] = -1.0f;
sprite->vertices[2][0] = +1.0f;
sprite->vertices[2][1] = +1.0f;
sprite->vertices[3][0] = +1.0f;
sprite->vertices[3][1] = -1.0f;
我以这种方式使用属性:
glUseProgram(sprite->program);
glEnableVertexAttribArray(sprite->position_attrib);
glVertexAttribPointer(sprite->position_attrib, 2, GL_FLOAT, GL_FALSE, 0,
sprite->vertices);
这是我的顶点着色器:
static const char character_vshader_g[] =
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#endif\n"
"uniform mat4 mvp_u;\n"
"attribute vec4 position_a;\n"
"attribute vec2 texture_a;\n"
"varying vec2 texture_v;\n"
"mat4 tmp;\n"
"void main() {\n"
" tmp = mat4(\n"
" vec4(0.5, 0 , 0 , 0 ),\n"
" vec4(0 , 0.5, 0 , 0 ),\n"
" vec4(0 , 0 , 0.5, 0 ),\n"
" vec4(0 , 0 , 0 , 0.5) \n"
" );\n"
" gl_Position = tmp * position_a;\n"
" texture_v = texture_a;\n"
"}\n";
基本上我正在尝试管理我自己的 mvp 统一矩阵,为了调试它,我硬编码了这个基本的缩放矩阵 tmp。
我的问题是这个乘法:
gl_Position = tmp * position_a;
除非我将所有 0 放入 tmp 中,否则根本不会改变任何东西。然后我的四边形消失了。否则我会看到我的四边形占据了整个视口(我没有任何类型的投影,如您所见,因此默认视口为 -1,-1 到 1,1)。
所以它几乎就像 tmp 没有做任何事情。
任何人都可以帮忙吗?