GLKitを使用してOpenGL for iPhoneを開始しました。私のプログラミングの背景は、ほぼ10年以上前のC、C++の経験はほとんどない、ほとんどJavaと客観的なものです。残っていることは、私がポインターで苦労したことの遠隔記憶であり、私は失敗したと思います。それはすべて私に戻ってくるかのようOpenGLが頂点ポインタを送信するか、バッファを生成する
は、今では、私は本当に私を助けたgreat, great tutorial series of Ian Terrelのいくつかの反復、に行ってきました
...そうです(感謝!!!)。
この質問(主に直接チュートリアルから取られる)コードの以下の部分についてです:
@interface AAAShape : NSObject
{
NSMutableData *vertexData;
// ...
}
@property(readonly) int vertexCount;
@property(readonly) GLKVector2 *vertices;
//...
@end
@implementation AAAShape
//...
-(GLKVector2 *)vertices
{
if(!vertexData)
{
vertexData = [NSMutableData dataWithLength:sizeof(GLKVector2)*self.vertexCount];
}
return [vertexData mutableBytes];
}
-(void)renderInScene:(AAAScene *)scene
{
//... Effect Stuff
//...
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, self.vertices);
//...
}
//...
@end
//Using the Shape:
//(AATriangle is of AAAShape and implements the vertextCount with "return 3;")
AAATriangle *triangle = [[AAATriangle alloc]init];
triangle.vertices[0] = GLKVector2Make(2., .0);
triangle.vertices[1] = GLKVector2Make(-2., .0);
triangle.vertices[2] = GLKVector2Make(.0, -3.);
//...
は、このすべてが本当にうまく動作しますが、その後、私はAppleのOpenGl Guideに次つまずきました:
[...]しかし、非効率的です。 DrawModelが呼び出されるたびに、インデックス と頂点データがOpenGL ESにコピーされ、 グラフィックハードウェアに転送されます。[...]パフォーマンスに影響を与える可能性があります。 [...]あなたのアプリケーション は、その頂点データを頂点バッファオブジェクト(VBO)に格納する必要があります。
:以降で描画void DrawModelUsingVertexBuffers() { glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,position)); glEnableVertexAttribArray(ATTRIB_POSITION); //... }
GLuint vertexBuffer; void CreateVertexBuffers() { glGenBuffers(1, &vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); }
とを:[...]
その(ほぼ同じ示す他のソース)を行うためのが提案のコードサンプルは、次のようになります
私はそれについていくつか質問があります:
- マンスの影響?コードを変更する必要はありますか?
- 何が... 本当には、上記の最初のコードサンプル(Ian's/my code)に続いていますか?
- なぜ頂点が読み込み専用で、どこでどのように頂点にメモリが割り当てられるのかは、頂点[i]を設定できますか?私はイアンの/私のアプローチで(ものをバッファが作成および結合性)上記のコードを入れて、なぜ接続がない可能性があり
- 結合との間で(変数の平均では、メソッド呼び出しか何かです)お絵かき?