3

私はMinecraft風の地形エンジンを作成してOpenGLと3Dを学習していますが、満足していないFPSを除いてすべてが正常に機能します。

50k頂点/フレームで約66fps

現在:私は現在、可視面のみを描画しており、錐台カリングを使用しています。キューブは16 x 16 x 32のキューブチャンクになっています(今のところ)。

チャンクごとに6つのディスプレイリストを使用します。各サイド(左、右、前、後ろ、上、下)に1つずつあるため、立方体は1つずつではなく、チャンクの側面全体に描画されます。

この方法で私は約20〜100fpsを取得しますが、これは素晴らしいことではありません。プロファイリングによると、グラフィックカードに約100kの頂点を送信し、空を見て頂点が10kを下回るとすぐに、最大200 + fpsになるので、それが私のボトルネックだと思います。

私がやりたいこと:少ないほど多いので、これを見つけました: http://ogre3d.org/forums/viewtopic.php?f=2&t=60381& p=405688#p404631

私が理解していることから、Kojackは巨大な平面の3Dメッシュを使用し、どういうわけか2Dテクスチャアトラスからこれらの巨大な平面の特定の場所にテクスチャを描画します。彼は、256x256x256の3Dテクスチャと、緑と青のチャネルを使用して2Dテクスチャアトラスにマッピングすると述べています。

彼の方法では、平面の頂点の数は一定であり、マップが適用されている場合は役に立たないこともありますが、それでも現在の頂点よりも少なくなっています。

私の問題:彼の言ったことは何も理解できませんでした:(、彼の方法を試したいのですが、彼が何をしたのか正確にはわかりません。ほとんどの場合、3Dテクスチャの経験が不足していると思います(ブロックを想像しています) 3Dテクスチャマップを使用して、テクスチャアトラスから平面の一部のみにテクスチャをどのようにマッピングしましたか。

誰かがコジャックが何をしたかを説明したり、私に役立つ場所を教えてもらえますか?グーグルでさえ今は何の助けにもなりません。

4

2 に答える 2

4

これがあなたの質問に対する答えです。まず、彼はシーンを256 x 256x256の立方体の立方体として扱っています。軸ごとに、256個の正方形(それぞれ2つの三角形で作成)を各軸の値(つまり、0,0,0から0,256,256、次に1,0,0から1,256,256など)で立方体のフルサイズでレンダリングします。 256,0,0から256,256,256)。次に、彼は反対方向を向いて同じことを行います-反対の法線で-軸ごとに合計512の正方形/1024の三角形を与えます。このプロセスをyとzに対して繰り返して、合計3072個の三角形と3072個の頂点を作成します(頂点は256 x 256 x 256の立方体のエッジに沿ってのみ発生します)。

今テクスチャリング。事実上、彼はすべての立方体を描画していますが、その場所でテクスチャを透明にすることで、一部を非表示にします。彼には、256 x 256 x2563Dテクスチャと16x16テクスチャアトラスの2つのテクスチャがあります。小さなテクスチャで構成されています。テクスチャを描画するには、まず、描画している立方体の座標を3Dテクスチャのテクスチャ座標として使用します。したがって、彼が42、7、13などの位置で立方体を描画している場合、3Dテクスチャ座標は42、7、13です。3Dテクスチャ内に格納されるのは、サブのu、v座標に対応する緑と青の値だけです。 -描画するテクスチャアトラスのテクスチャ。したがって、彼の例では、3Dテクスチャの色はR = 0(未使用)、G = 2、B = 4、A = 0(未使用)です。彼は2と4をu、v座標として使用し、テクスチャアトラスの位置2、4にテクスチャを描画します。テクスチャアトラスは基本的に、16 x 16(256)の小さなテクスチャに対応する1つの巨大なテクスチャであるため、

彼が立方体を掘り起こしたい場合、彼がする必要があるのは、その時点で3Dテクスチャに格納されている値を変更して、アトラスの透明なサブテクスチャを指すようにすることです。したがって、テクスチャアトラスの0,0がサブである場合-完全に透明なテクスチャ。その場所にある3DアトラスのテクスチャをR=0(未使用)、G = 0、B = 0、A = 0(未使用)に設定できます。

于 2011-01-29T11:26:34.957 に答える
2

顔のテクスチャをテクスチャアトラスに配置してみてください。ごとのテクスチャバインドが多すぎます。

于 2011-01-31T14:47:47.127 に答える