Opengl 实现简单的着色器程序和渲染
我试图实现一个简单的着色器程序并渲染一组顶点,但出现了一个奇怪的错误: 这是关于深度缓冲区的问题吗?我想我以前也有过类似的问题 在我的绘制方法中:Opengl 实现简单的着色器程序和渲染,opengl,Opengl,我试图实现一个简单的着色器程序并渲染一组顶点,但出现了一个奇怪的错误: 这是关于深度缓冲区的问题吗?我想我以前也有过类似的问题 在我的绘制方法中: // Parameters: GLdouble* vertices, int num_vertices; Gluint vboId; glGenBuffers(1,&vboId); glBindBuffer(GL_ARRAY_BUFFER,vboId); glBufferData(GL_ARRAY_BUFFER, sizeof(GLdoub
// Parameters: GLdouble* vertices, int num_vertices;
Gluint vboId;
glGenBuffers(1,&vboId);
glBindBuffer(GL_ARRAY_BUFFER,vboId);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLdouble) * num_vertices * 3, vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,vboId);
glVertexPointer(3,GL_DOUBLE,0,NULL);
glEnableClientState(GL_VERTEX_ARRAY);
glUseProgram(shaderProgramId);
glDrawArrays(GL_TRIANGLES,0,num_vertices);
// Shader program
// Vertex
void main(void) {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
// Fragment
void main(void) {
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
我在画没有索引的图,模型需要索引。正如@Bart在评论中所说的那样 要解决此问题,我呼吁:
glDrawElements(GL_TRIANGLES,num_indices * 3, GL_UNSIGNED_INT, indices);
而不是:
glDrawArrays(GL_TRIANGLES,0,num_vertices);
你的着色器看起来不错。您的顶点数据似乎已损坏。VBO中是否只有三角形?有虚拟顶点吗?显然,错误的顶点与面连接。好的!你可能是对的,我的顶点:GLdouble*顶点=新的GLdouble[mesh->nv];int num_顶点=网格->nv;对于(inti=0;i