1
3 차원 공간에서 일부 쿼드 평면을 그리는 OpenGL을 사용하여 응용 프로그램을 만듭니다. 각 평면마다 서로 다른 꼭지점 좌표를 설정하기 전까지 모든 것이 잘 작동했습니다. 이제 새로운 좌표로 평면을 만들면 이전에 만들어진 평면 인 것처럼 그려집니다. 즉, 새로운 좌표는 노트가 사용됩니다.VBO가 QGLBuffer를 사용하여 업데이트되지 않습니다.
Qt 라이브러리와 함께 OpenGL을 사용하고 있습니다.
void Plane::initBuffers()
{
mVertexVBO.create(); //QGLBuffer
mIndexVBO.create(); //QGLBuffer
mVertexVBO.bind();
mIndexVBO.bind();
mVertexVBO.setUsagePattern(QGLBuffer::StaticDraw);
mIndexVBO.setUsagePattern(QGLBuffer::StaticDraw);
/* mVertices and mIndices are a QVarLengthArray object */
Vertex* aVerts = mVertices.data();
for(int i=0; i<4; ++i)
{
qDebug() << aVerts[i].x << " " << aVerts[i].y << " " << aVerts[i].z;
}
qDebug() << " --- ";
mVertexVBO.allocate(mVertices.data(), sizeof(Vertex)*4);
mIndexVBO.allocate(mIndices.data(), sizeof(GLuint)*6);
}
나는 두 개의 비행기를 만들었습니다. 그들 각자는 다음과 같은 좌표로 기본적으로 만들어집니다 :
-1 -1 0
-1 1 0
1 1 0
1 -1 0
내가
1 0 0
0 0 0
0 0 1
1 0 1
에 첫 비행기의 좌표를 변경하지만, 그 비행기는 정확히 같은 그리는 있습니다. 모델 매트릭스를 변경했기 때문에 다른 장소에서만 사용됩니다. QVarLengthArray는 올바르게 갱신됩니다 (위의 코드 실행은 저에게 그것을 보여 줬습니다).
누군가 내가 무엇을 놓치고 있는지 알고 있습니까?
'QGLBuffer'를 사용하지 않으셨습니까? 버퍼 객체가 바인딩되어야하는 위치를 실제로 취하는'bind' 함수와 같은 중요한 API가 누락 된 것 같습니다. 또한 이러한 객체를 만들 때 어떤 유형 매개 변수를 사용합니까? –
예. 이게 내 B 계획이야. QGLBuffer는 약간의 이점을 제공하기 때문에 (그렇게 다루기가 더 쉽다) 나는 그렇게하고 싶지 않다. QGLBuffer 객체를 만들기 위해 Qt 매개 변수를 전달하여 버퍼 유형 (정점, 인덱스 ...)을 결정했습니다. Qt 문서에 따르면, 언급 한 매개 변수는 내부적으로 QGLBuffer로 처리됩니다. 답변 해주셔서 감사합니다! –