Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Qt Can';t使用Qopenglbuffer进行渲染_Qt_Opengl_Rendering_Qopenglfunctions - Fatal编程技术网

Qt Can';t使用Qopenglbuffer进行渲染

Qt Can';t使用Qopenglbuffer进行渲染,qt,opengl,rendering,qopenglfunctions,Qt,Opengl,Rendering,Qopenglfunctions,我的目标是用Qopenglbuffer(索引和顶点)渲染一个正方形。 但是在看了所有的导师和医生之后,我错过了一些东西。现在它什么也不呈现 以下是此缓冲区的init() initializeOpenGLFunctions(); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); m_vao.create(); m_vao.bind(); size_t size = 12; // test value. 5 points * 3 coordin

我的目标是用Qopenglbuffer(索引和顶点)渲染一个正方形。 但是在看了所有的导师和医生之后,我错过了一些东西。现在它什么也不呈现

以下是此缓冲区的init()

initializeOpenGLFunctions();

glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);

m_vao.create();
m_vao.bind();

size_t size = 12; // test value. 5 points * 3 coordinates
m_primitives = new GLfloat[size];

m_primitives[0]  = 0.0f;
m_primitives[1]  = 0.0f;
m_primitives[2]  = 0.0f;
m_primitives[3]  = 0.5f;
m_primitives[4]  = 0.5f;
m_primitives[5]  = 0.0f;
m_primitives[6]  = 0.0f;
m_primitives[7]  = 0.5f;
m_primitives[8]  = 0.0f;
m_primitives[9]  = 0.5f;
m_primitives[10] = 0.0f;
m_primitives[11] = 0.0f;

m_indices = new GLint[6];
m_indices[0] = 0;
m_indices[1] = 1;
m_indices[2] = 2;
m_indices[3] = 0;
m_indices[4] = 3;
m_indices[5] = 1;

m_vertexBuffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
m_vertexBuffer->create();
m_vertexBuffer->bind();
m_vertexBuffer->allocate(m_primitives, 12 * sizeof(GLfloat));
m_vertexBuffer->setUsagePattern(QOpenGLBuffer::StreamDraw);

m_indexBuffer = new QOpenGLBuffer(QOpenGLBuffer::IndexBuffer);
m_indexBuffer->create();
m_indexBuffer->bind();
m_indexBuffer->setUsagePattern(QOpenGLBuffer::StaticDraw);
m_indexBuffer->allocate(m_indices, 6 * sizeof(GLint));

m_program = new QOpenGLShaderProgram();
m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/LabelShader.vs");
m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/LabelShader.fs");

m_program->link();

QImage i = QGLWidget::convertToGLFormat( m_fontTexture );
m_pijeltexture = new QOpenGLTexture(m_fontTexture, QOpenGLTexture::GenerateMipMaps);
m_pijeltexture->setWrapMode(QOpenGLTexture::ClampToEdge);
下面是render()方法:

有人遇到这样的问题吗?

谢谢你的帮助。 在使用glGetError之后,我发现我使用了错误的枚举。 我忽略了索引只能是3种类型:GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT或GL_UNSIGNED_INT

所以问题出在这一行: 元素(GL_三角形,6,GL_INT,0)

我改为: gld元素(GL_三角形,6,GL_无符号,0)

现在一切都好了。

着色器的内容是什么?您是否也尝试过检查
glGetError()
?VS:attribute mediump vec3 Vertex;void main(){gl_Position=vec4(顶点,1.0)}FS:#版本150 void main(void){gl_FragColor=vec4(1.0,0.0,0.0,1.0);}glError在gldrawer元素之后返回1280
 m_program->bind();
m_vao.bind();
glActiveTexture(GL_TEXTURE0);
m_pijeltexture->bind(0);
m_vertexBuffer->bind();
m_indexBuffer->bind();

int vertexLocation =  m_program->attributeLocation("Vertex");
m_program->enableAttributeArray(vertexLocation);
m_program->setAttributeBuffer(vertexLocation, GL_FLOAT, 0, 3);

glDrawElements(GL_TRIANGLES, 6, GL_INT, 0);

m_vao.release();
m_vertexBuffer->release();
m_indexBuffer->release();
m_program->disableAttributeArray(0);
m_program->release();