頂点シェーダーの問題に苦しんでいます。次の位置属性を持つスプライトがあります。
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;
tmpにすべて0を入れない限り、何も変更しません。その後、私のクワッドが消えます。そうしないと、クワッドがビューポート全体を占めていることがわかります (ご覧のように、投影の種類がないため、デフォルトのビューポートは -1,-1 から 1,1 です)。
つまり、tmp は何もしていないようです。
誰でも助けることができますか?