CMeshを変更しよう(3)
SVertexをばらして使うか、それともこのまま使うか。現在、SVertexはこのようになっています。
struct SVertex { Vector3d position; // 位置 Vector3d normal; // 法線 Vector2d tex_uv; // テクスチャの座標 unsigned int color; // 色 };
コーディングする際にはこのほうが扱いやすいのですが、gl*Pointer()を使っているため、頂点は頂点、法線は法線で連続していないと高速化*1できず、glInterleavedArrays()を使っているのと同じことになる なんていうのを読んだことがあるんです。あるんです……が、t-potの中の人は
<と書いていました。う〜ん、どの情報が真実なんでしょう? 僕としては連続してデータが入っていたほうがキャッシュにヒットしやすいので、構造体は使わないほうがいいと思うのですが……。確かその辺の話がGame Programming Gems1に載っていたと思うので、火曜日になったら大学で確認してみようと思います。今日はもう眠くて駄目。。。
glVertexPointer の3つめの引数は異なる頂点の時のデータの幅です。今回はこの引数は0にしてデータごとに別の配列を用意していますが、これはデータキャッシュの効率が最悪です。本当は、頂点データの構造体を定義して、その構造体の配列としてデータを準備するような構造にしないとパフォーマンス的にダメダメでしょう。
- 作者: Mark DeLoura,川西裕幸,狩野智英
- 出版社/メーカー: ボーンデジタル
- 発売日: 2001/06
- メディア: 単行本
- 購入: 2人 クリック: 314回
- この商品を含むブログ (40件) を見る
*1:つまりgl*Pointerを使う利点