問題の根源である Objective-C を知っている人のために、これを十分に一般的なものにしようとします (または、C だけにあるのでしょうか?)。コンテキストを提供しながら、できるだけ多くの OpenGL を避けます。
GLfloat
このような配列に 3D オブジェクトの頂点データを格納しています
GLfloat teapot[] = { 1.0, 0.0, .... 0.0 };
(簡潔にするために実際の値は省略されています)
それから私はこのような電話をかけています
[self drawObject:teapot];
このように定義されたメソッドの
-(void) drawObject:(GLfloat *)object {
NSLog(@"%ld %ld", sizeof(object), sizeof(teapot));
}
もちろん、目標はものを描くことですがsizeof(object)
、正しい値を返さないため、正しく機能しません。sizeof()
( forを使用する必要があることを除いて、ここでは関係がないため、同様にすべての描画コードを省略しましたglDrawArrays()
。
からの出力は次のNSLog()
ようになります。
sizeof object = 4, sizeof teapot = 6336
渡されたのサイズが直接object
呼び出しのサイズとは異なることを示していteapot
ます。参照が正しく機能するため、つまり、問題なく機能するため、奇妙ですglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, object)
。したがって、オブジェクトを確実に読み取っています。現時点では、オブジェクトのサイズを整数として渡す必要がありますがglDrawArrays
、これは厄介です。渡されたコードは次のようになります
[self drawObject:teapot ofSize:(int)sizeof(teapot)];
一方、追加のパラメーターを渡すことは本当に避けたいと思います。
何か案は?御時間ありがとうございます。