パーティクル システム レンダラーを作成しています。問題は、すべてのパーティクルの位置が、時間をかけて統合し、他の処理を行うクラスにカプセル化されていることです。値を個別の配列にコピーして各フレームをレンダリングする代わりに、すべての値を一度に指すために使用できる次のようなポイント構造体を作成しました。
typedef struct
{
float *x, *y, *z;
} point;
次に、これらの配列を、粒子の配列と同じサイズで malloc します。
上部の宣言:
point *points;
マロク:
points = malloc(sizeof(point) * [particles count]);
次に、すべてのパーティクルをループして、各位置のアドレスを対応するポインターにコピーします。
for (int i = 0; i < [particles count]; ++i)
{
points[i].x = &[[particles objectAtIndex:i] getPosition].x;
points[i].y = &[[particles objectAtIndex:i] getPosition].y;
points[i].z = &[[particles objectAtIndex:i] getPosition].z;
}
私の位置取得関数は、ベクトル構造体 (float x、y、z) を返すだけです。
これで最初に遭遇した問題は、次のように値を表示するときです。
NSLog(@"%f", *points[0].x);
値を読み取る代わりに (例: 0.5)、丸めて否定した値 (つまり -1.0) を表示します。
次に、次のように VBO にデータを取得します。
glBufferData(GL_ARRAY_BUFFER, sizeof(point) * [particles count], &points[0], GL_DYNAMIC_DRAW);
これも間違っていると思いますが、ポインターを VBO に渡す方法に関する情報が見つかりません。