0

Xcode openglesテンプレートを拡張し、仮想es1のものを削除しました。これで、RAMからvertexArrayとindexArrayの両方でモデルをレンダリングでき、次に、vertexArray VBOをgen-、bind-、dataBufferし、通常のRAMポインターをoffset-pointerに変更しました。これはすべて正常に機能しますが、indexArayをBOおよびgen-、bind-、dataBufferに配置し、RAMポインターをオフセットポインターに変更する次のフェーズは失敗します:(

私が気付いていない一般的な落とし穴はありますか?私にとって、VBOを作成できる人は誰でもindexArray-bufferを作成できるはずです...

次のコードはsetupGLで実行されます

    glGenBuffers(1, &geometryPtr->vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(geometryPtr->vertexNormalUV), geometryPtr->vertexNormalUV, GL_STATIC_DRAW);
    //
    glGenBuffers(1, &geometryPtr->vertexIndicesBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(geometryPtr->indices), geometryPtr->indices, GL_STATIC_DRAW);

次に、レンダリングルーチンの基本的な考え方

    glBindBuffer(GL_ARRAY_BUFFER, geometryPtr->vertexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, geometryPtr->vertexIndicesBuffer);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(0));
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(12));
    glEnableVertexAttribArray(GLKVertexAttribNormal);
    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_TRUE, 32, BUFFER_OFFSET(24));
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
    //
    glDrawElements(GL_TRIANGLES, trianglesCount*3, GL_UNSIGNED_SHORT, (void *)offset);
    glDrawElements(GL_TRIANGLE_STRIP, triangleStripOffsets[m], GL_UNSIGNED_SHORT, (void *)offset);

助けてください?:)ニールズ

4

1 に答える 1

0

ラーソン氏の提案に従い、コメントで質問に回答しました。質問を閉じるための(公式の)回答を提供します。

さらに回避するために、私は基本的にsizeof()によって、システムがsystem-memory-managerに、ポインター送信に割り当てられたサイズを要求するように要求すると仮定しました...

ニールズ

追伸 ラーソンさん、ありがとうございます。

于 2012-07-28T17:13:36.507 に答える