頂点配列オブジェクトを頂点バッファ&とQtを使ったインデックスバッファと組み合わせようとしています。頂点配列オブジェクトを頂点バッファとインデックスバッファとの組み合わせ
次のコードは完璧に働いVAOとVBOを兼ね備え:
// Create buffers
void Tile::setupBuffers() {
vbo.create();
vbo.bind();
vbo.setUsagePattern(QOpenGLBuffer::StaticDraw);
vbo.allocate(vertices.constData(), vertices.size() * sizeof(QVector3D));
vbo.release();
vao.create();
shaderProgram->bind();
vao.bind();
vbo.bind();
shaderProgram->enableAttributeArray(0);
shaderProgram->setAttributeBuffer(positionLocation, GL_FLOAT, 0, 3, 0);
vao.release();
shaderProgram->disableAttributeArray(0);
vbo.release();
shaderProgram->release();
}
// Draw triangle
void Tile::draw() {
shaderProgram->bind();
vao.bind();
glDrawArrays(GL_TRIANGLES, 0, 3);
vao.release();
shaderProgram->release();
}
私は今、インデックスバッファは何も追加しないようにしようとしている明確な色を除いて描かれます。ここでは、コードです:
// Create buffers
void Tile::setupBuffers() {
vbo.create();
vbo.bind();
vbo.setUsagePattern(QOpenGLBuffer::StaticDraw);
vbo.allocate(vertices.constData(), vertices.size() * sizeof(QVector3D));
vbo.release();
ibo.create();
ibo.bind();
ibo.setUsagePattern(QOpenGLBuffer::StaticDraw);
ibo.allocate(indices.constData(), indices.size() * sizeof(GLushort));
ibo.release();
vao.create();
shaderProgram->bind();
vao.bind();
vbo.bind();
shaderProgram->enableAttributeArray(0);
shaderProgram->setAttributeBuffer(positionLocation, GL_FLOAT, 0, 3, 0);
ibo.bind();
vao.release();
shaderProgram->disableAttributeArray(0);
vbo.release();
ibo.release();
shaderProgram->release();
}
void Tile::draw() {
shaderProgram->bind();
vao.bind();
glDrawElements(GL_TRIANGLES, 3, GL_FLOAT, 0);
vao.release();
shaderProgram->release();
}
ここに私の頂点ベクトル&インデックスベクトルの内容です:
vertices = {
QVector3D(1.0f, -1.0f, 0.0f),
QVector3D(1.0f, 1.0f, 0.0f),
QVector3D(-1.0f, -1.0f, 0.0f)
};
indices = {
0, 1, 2
};
私は2番目のコードブロックにVAO/VBO/IBOの結合の順序が間違っていると仮定し、私はどのように正しく行われたのか分かりません。どんな助けもありがとうございます。
これに実際のOpenGLはありますか、それとも何らかのラッパーを使っていますか? –
は、私はQtのが提供するラッパーを使用します。 http://doc.qt.io/qt-5/qopenglvertexarrayobject.html http://doc.qt.io/qt-5/qopenglbuffer.html – vigilanum
...ワオ。 Qtのラッパーは* garbage *です。私は悪いことを言うことはできません: 'setAttributeBuffer'は頂点の状態とはまったく関係ない*型のメンバであるか、バッファオブジェクトを直接渡すことはできません*それは[glVertexAttribPointer'の非常に最悪の側面です](http://stackoverflow.com/q/37972229/734069)。私が感銘を受けた;それはひどくねじ込むために真の努力を要する*。 –