2016-11-29 3 views
1

私はOpenGLを使用していて、私のコードで私のようないくつか読めないし、迷惑なラインがあります。常にキャスティングするのを避けるためにvec3の代わりにvec4を保つ方がいいですか?

newChild->dposition = dvec_4(dvec_4(newChild->boundingVerts[2].position, 1) + newChild->parent->dposition); 

アイデアはそれが良い節約に達する可能性があり、シーン内の多くのオブジェクトで、vec3sの位置を維持することでしたがさらに重要なことに、グラフィックスカードに送信されるバッファのサイズを減らすことができます。しかし、それは実際にコードを読むのが難しくなります.4番目のコードに加えて、私が想像するすべてのキャストは何かの費用がかかります。それで、キャスティングを避けるためにvec4sを保つ方がいいですか?

+1

どの線形代数ライブラリが 'dvec_4'ですか? [GLM](http://glm.g-truc.net)のようには見えません。 – genpfault

+0

@ GLM。 - typedef glm :: vec4 dvec_4に行くライブラリーのgenpfault。ハハ、何か利益があるかどうか分からない。 – Zebrafish

+0

その特定のコードに 'vec4'sが必要なのはなぜですか?なぜあなたはCPU側でvec4が必要なのでしょうか?それは遠近法でいくつかのトリックを演奏するためにのみ必要ですが、実際にはほとんど必要ありません。 – derhass

答えて

0

すべてのコードにアクセスすることなく、言うことはできません。 はしかし、私はむしろvec4sを使用すると、パフォーマンス/コード品質の利益をもたらすかもしれないと言うだろう:

  • データはおそらくGPU上で使用されていることを推測、それはvec3よりも、おそらくより効率的なvec4を保存/ロードすることです。私は確かではありませんが、私はvec3を読み込むための単一の命令があるとは思わない。それはvec2と私が思う浮動小数点数を読み込むことに壊れます。
  • 後で、追加のフロートにいくつかの追加データを簡単に保存することができます。
  • キャスティングとコードの読み込みが簡単です。
  • 構造体のメモリレイアウト/メンバタイプによっては、構造体が16バイトに整列されているため、 "メモリ最適化"を元に戻すことができます。

何か問題があれば、私を修正してください。

関連する問題