0
代碼上的碰撞操作正常,並且繪製一個彩色三角形邊相等:調用glDrawArrays使顏色頂點數組下面的OpenGL ES 2.0
GLfloat triangle_pos[] =
{
-0.5, -0.25, 0.0,
0.5, -0.25, 0.0,
0.0, 0.559016994, 0.0
};
void draw_triangle()
{
glUseProgram(SHADER.program);
matrix mv;
multiply_matrix(VIEW_MATRIX/*ident*/, MODEL_MATRIX/*ident*/, mv);
matrix mvp;
multiply_matrix(PROJECTION_MATRIX/*ortho*/, mv, mvp);
glUniformMatrix4fv(SHADER.uniforms[0]/*um_mvp*/, 1, GL_FALSE, mvp);
glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(SHADER.atributes[0]/*av_pos*/);
glUseProgram(0);
}
頂點着色器:
attribute vec4 av_pos;
varying vec4 vv_col;
uniform mat4 um_mvp;
void main()
{
vv_col = um_mvp * av_pos;
gl_Position = vv_col;
}
片段着色器:
precision lowp float;
varying vec4 vv_col;
void main()
{
gl_FragColor = vv_col;
}
允許變化的頂點着色器來從外部加載的顏色值:
attribute vec4 av_pos;
attribute vec4 av_col;
varying vec4 vv_col;
uniform mat4 um_mvp;
void main()
{
vv_col = av_col
gl_Position = um_mvp * av_pos;
}
而修改後的代碼將是:
GLfloat triangle_pos[] =
{
-0.5, -0.25, 0.0,
0.5, -0.25, 0.0,
0.0, 0.559016994, 0.0
};
GLfloat triangle_col[]=
{
1.0,0.0,1.0,1.0,
0.0,1.0,1.0,1.0,
1.0,0.0,0.0,1.0
};
void draw_triangle()
{
glUseProgram(SHADER.program);
matrix mv;
multiply_matrix(VIEW_MATRIX, MODEL_MATRIX, mv);
matrix mvp;
multiply_matrix(PROJECTION_MATRIX, mv, mvp);
glUniformMatrix4fv(SHADER.uniforms[0]/*um_mvp*/, 1, GL_FALSE, mvp);
glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos);
glEnableVertexAttribArray(SHADER.atributes[1]/*av_col*/);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, triangle_col);
glDrawArrays(GL_TRIANGLES, 0, 3); // just crashing i can't even glGetError() after that line
glDisableVertexAttribArray(SHADER.atributes[0]);
glDisableVertexAttribArray(SHADER.atributes[1]);
glUseProgram(0);
}
爲什麼調用glDrawArrays崩潰,以及如何解決這個問題?
這樣愚蠢的錯誤,謝謝 – Aristarhys 2012-03-17 06:43:03