-1
を描画しない私は、頂点配列オブジェクトを使用してのOpenGL 4.1のいくつかの頂点とインデックスを描くしようとしている:のOpenGL 4.1:頂点配列オブジェクトが何も
float vertices[] = {-0.8, -0.8, 0, 0.8, -0.8, 0, 0, 0.8, 0};
unsigned int indices[] = { 0, 1, 2 };
VAOを設定し、glDrawElementsを使用して描画した後()、空の画面が表示されます。私はまた、元の頂点位置とハードコードされた色を返すだけの単純なシェーダペアを使用しようとしましたが、そこには運がありません。
ここVBOとVAOセットアップするコードです:
unsigned int vertexArray;
glGenVertexArrays(1, &vertexArray);
glBindVertexArray(vertexArray);
unsigned int vertexBufferID;
unsigned int indexBufferID;
glGenBuffers(1, &vertexBufferID);
glGenBuffers(1, &indexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
glBufferData(GL_ARRAY_BUFFER, 4 * vertexCount, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 4 * vertexCount, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * indexCount, indices, GL_STATIC_DRAW);
を私は使用してVAOを描く:
glBindVertexArray(vertexArray);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)0);
はここですべてのOpenGLの痕跡だが呼び出されます:
// Setup code
glViewport(0,0,1024,768)
glGetString(GL_RENDERER)="GeForce GT 540M/PCIe/SSE2"
glGetString(GL_VENDOR)="NVIDIA Corporation"
glGetString(GL_VERSION)="4.1.0 NVIDIA 359.46"
glGetString(GL_SHADING_LANGUAGE_VERSION)="4.10 NVIDIA via Cg compil..."
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glGenVertexArrays(1,000000000015F9B4)
glBindVertexArray(1)
glGenBuffers(1,000000000015F9D4)
glGenBuffers(1,000000000015F9F4)
glBindBuffer(GL_ARRAY_BUFFER,1)
glBufferData(GL_ARRAY_BUFFER,36,000000000015FA48,GL_STATIC_DRAW)
glEnableVertexAttribArray(0)
glVertexAttribPointer(0,3,GL_FLOAT,false,36,0000000000000000)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,2)
glBufferData(GL_ELEMENT_ARRAY_BUFFER,12,000000000015FA88,GL_STATIC_DRAW)
glClearColor(0.300000,0.300000,0.400000,1.000000)
// End of setup, here's the code rendering two frames (they just repeat):
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
glBindVertexArray(1)
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,0000000000000000)
glGetError()=GL_NO_ERROR
wglSwapBuffers(0000000069011A82)=true
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
glBindVertexArray(1)
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,0000000000000000)
glGetError()=GL_NO_ERROR
wglSwapBuffers(0000000069011A82)=true
私が言うことができるのは、私がやっているはずのチュートリアルはほとんど何をしているのか、何らかの理由でアプリケーション私の画面上の耳。私は何が欠けていますか?
あなたは大抵正しいです。 0のストライドは、配列がきつく詰め込まれていると仮定するためにOpenGLを引き起こし、他のパラメータに基づいて正しいストライド値を計算します。それに関係なく正しいストライドを渡すことは間違いではありません。しかし、ストライド値として配列の長さを指定しますが、これは動作しません>< – Bartvbl
これは私が指していたものです:) – wasthishelpful