2017-12-06 30 views
0

assimpとGL ESを使用してiOS上でモデルを読み込んでレンダリングする小さなアプリケーションを作成しようとしています。私はGL ESではなくOpenGLで作業してきました。 iOSでは決して何もしません。glDrawElementsのiOS GL ES exc_bad_access

現在、glDrawElementsを呼び出すとEXC_BAD_ACCESSエラーが発生します。私は何が間違っているのか分かりません。

これは私の頂点タイプである:私は私がやったように私はassimpを通じて正確なモデルをロードしてることはかなり確信してい

class Mesh { 
public: 
    Vertex* vertices; 
    GLuint verticesCount; 
    GLubyte* indices; 
    GLuint indicesCount; 

    std::vector<Texture> textures; 
    GLuint vertexBuffer, indexBuffer; 

    Mesh(Vertex* vertices, GLubyte* indices, std::vector<Texture> textures); 
}; 

typedef struct { 
    float Position[3]; 
} Vertex; 

そして、これが私のメッシュタイプであります以前はこのコードを別のプロジェクトから取り除いていました。だから私は、データがメッシュのコンストラクタに渡すことを使用していると私は、この使用してVBOのを移入しています:すでに私は、その後にこれを呼び出しています事前レンダリング機能で設定された投影とビューモデルmatriciesで

glGenBuffers(1, &this->vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, this->vertexBuffer); 
    int sizeOfVerts = sizeof(Vertex) * this->verticesCount; 
    std::cout << "Size of verts in bytes " << unsigned(sizeOfVerts) << std::endl; 
    glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)sizeOfVerts, &this->vertices[0], GL_STATIC_DRAW); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 

    glGenBuffers(1, &this->indexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->indexBuffer); 
    int sizeOfInd = sizeof(GLubyte) * this->indicesCount; 
    std::cout << "Size of inds in bytes " << unsigned(sizeOfInd) << std::endl; 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)sizeOfInd, &this->indices[0], GL_STATIC_DRAW); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

を私のメッシュをレンダーする:

- (void)renderMesh:(Mesh*)mesh 
{ 
    glBindBuffer(GL_ARRAY_BUFFER, mesh->vertexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->indexBuffer); 

    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 

    int meshSize = mesh->indicesCount; 
    glDrawElements(GL_TRIANGLES, meshSize, GL_UNSIGNED_BYTE, 0); 

    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
} 

シェイダーの_positionSlotを使用すると、私は退屈な二等分を描くために既にそれを使用しているので、私のシェイダーが動作することを知っています - エラーは間違いなく上記のコードにあります - どこか。事前にみんなで

おかげで、私は確かに私upvoteの両方を作ってあげると受け入れる:)

+2

glEnableVertexAttribArrayの呼び出しがありません。 – Columbo

+0

ありがとう、私はそれを試してみましたが、違いを生むようには見えませんでした - それも基本的な四角形をレンダリングします – jProg2015

+0

すべてのインデックスをループして、すべてが Columbo

答えて

0

私はインデックスタイプのGLubyteを使用していたので、これは起こっていた理由があります。私の高いポリモデルでは小さすぎます。このエラーメッセージでエラーがなぜ現れたのかは不明です。他のプラットフォームでは、同じコードがジャンクモデルになります。おそらくiOS固有ですか?うまくいけば、これは誰かを助けることができる。

関連する問題