2
当尝试使用绘制圆调用glDrawArrays它显示的circle调用glDrawArrays古怪绘制阵列
的VBO季度,由代码生成的是正确的。顺便说一句,没有像0,0,0这样的坐标。 它似乎只绘制正面顶点,但如果我将顶点乘以-1,则glDrawArrays会在屏幕的另一侧绘制它。 这里是我的代码:
uint un_vertexArraySize = 20;
float f_radius = 1.0f;
float f_degrees = 0;
GLfloat f_vert[un_vertexArraySize*3];
// Generate circle vertices
for (int i=0; i<un_vertexArraySize*3; i+=3)
{
f_vert[i] = cos(f_degrees*M_PI/180)*f_radius;
f_vert[i+1] = sin(f_degrees*M_PI/180)*f_radius;
f_vert[i+2] = 0.0f;
f_degrees += (360/un_vertexArraySize);
}
// Do buffer stuff
GLuint vbo;
glGenBuffers(1, &vbo);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, un_vertexArraySize*3,
f_vert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0); // unbind VBO
glBindVertexArray(0); // unbind VAO
// Start loop
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
shader.Use();
glBindBuffer(GL_ARRAY_BUFFER, vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINE_STRIP, 0, un_vertexArraySize*3);
glDisableVertexAttribArray(0);
shader.UnUse();
// End loop
破片着色器:
#version 130
void main(void)
{
gl_FragColor[0] = gl_FragCoord.x/640.0;
gl_FragColor[1] = gl_FragCoord.y/480.0;
gl_FragColor[2] = 0.2;
gl_FragColor[3] = 1.0f;
}
韦尔着色器:
#version 130
attribute vec3 coord3d;
void main(void)
{
vec4 temp = vec4(coord3d, 1.0f);
gl_Position = temp;
}
我试图谷歌,或找到计算器,但一无所获。
就像一个注释:而不是乘以'4',我会乘以sizeof(GLfloat)',因为那么它会更清晰地与该值相乘。 –
我不好意思提这件事,那是一个更好的方法 –