Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 实现简单的着色器程序和渲染_Opengl - Fatal编程技术网

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;inv;i++){顶点[i*3]=网格->顶点[i].x;顶点[i*3+1]=网格->顶点[i].y;顶点[i*3+2]=网格->顶点[i].z;}//对不起,我不知道如何编辑这张图片。你有索引吗?似乎你只是从顶点数据中绘制三角形,然而你的顶点数组似乎依赖于索引来形成三角形。@Bart我想我有,但我缺乏理解。我的网格有一组三角形和一个变量nt(三角形数)。它有一组顶点和一个变量nv(顶点数)。我如何构建一个正确的数组以与glDrawArrays一起使用?必须是这样。:)您可能希望包括您为修改代码所做的工作,并向我们展示您是如何使其工作的。然后你会得到一个完整的答案。