OpenGL ESプログラミングの初心者です。私は良いチュートリアルを開始し、プロジェクトが正方形を表示することが分かった。オブジェクトを表示しなくなったOpenGL ES
[model update];
[model load];
を、それがよりになり、この方法:私は、その後、ビューコントローラで、私はちょうど呼ぶだろうなどと頂点を格納しますModelオブジェクト、色、にビューコントローラのうち、最もOpenGLのコードを移動しようとしました私が表示するいくつかのモデルがあったら練習してください。私がこれをして以来、キューブはもはや画面に表示されません。私は、このメソッドをコメントアウトすると、キューブは表示されますが、画面を塗りつぶすだけなので、モデルビュー行列の計算がすべて行われる更新メソッドにはエラーがあると私は思っています。
- (void)load{
self.effect = [[GLKBaseEffect alloc] init];
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
GLKTextureLoaderOriginBottomLeft,
nil];
NSError * error;
NSString *path = [[NSBundle mainBundle] pathForResource:@"tile_floor" ofType:@"png"];
GLKTextureInfo * info = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error];
if (info == nil) {
NSLog(@"Error loading file: %@", [error localizedDescription]);
}
self.effect.texture2d0.name = info.name;
self.effect.texture2d0.enabled = true;
glGenVertexArraysOES(1, &vertexArray);
glBindVertexArrayOES(vertexArray);
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Color));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, TexCoord));
glBindVertexArrayOES(0);
}
そして、ここでは、レンダリング方法は次のとおりです:
-(void)update: (int)width And:(int)height{
float aspect = (width/height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(
GLKMathDegreesToRadians(65.0f), aspect,
4.0f, 10.0f);
self.effect.transform.projectionMatrix = projectionMatrix;
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 6.0f);
rotation += 90;
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix,
GLKMathDegreesToRadians(rotation), 0, 0, 1);
self.effect.transform.modelviewMatrix = modelViewMatrix;
}
そしてここでは、積載方法である
- (void)render{
[self.effect prepareToDraw];
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBindVertexArrayOES(vertexArray);
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
}
任意の助けいただければ幸いです。ありがとう。
[モデルの更新]と[モデルの読み込み]を投稿できますか? – whooops
また、更新方法全体をコメントアウトする代わりに、どの部分が問題を引き起こしているかを調べることもできます。それは翻訳ですか?回転?それらのどちらでもない場合は、診断をより簡単にするためにコメントアウトしてください。 – whooops
翻訳と回転の行を個別にコメントしてみました。画面は黒のままでした。しかし、私はそれらの両方をコメントアウトすると、オブジェクトが描画されますが、それは私が望むものではない画面を埋める。上記のメソッドは更新メソッドです。パースペクティブを正しく作成できるように、ビューの幅と高さを渡す必要があります。 – user1163876