0

Away3D API を使用して、Flash AS3 でタイルベースの 3D RPG ゲームを作成します。

私の問題は、これまでのところaway3d APIを本当に理解していないことです..

「ブロック」クラスを作りたいです。tile-map-data を読み込む場合、次のようなものを作成したい:

viewport.addchild( tileArray[ layer ][ x ][ y ] );

したがって、これはループになります。

ここまではうまくいきましたが、これは 3dObject でなければなりません。

その配列をその3dObjectで埋めるには、このようなものを作りたいです。

tileArray[ layer ][ x ][ y ] = myBlocksClass.getBlock( "grassCube" );

したがって、myBlocksClass の getBlock 関数は 3dObject を返します。

<edit>

これらのブロックは、Minecraft のようなある種のブロック (grassCube、dirtCube など) である必要があるため、1 つのブロックの複数のインスタンスをマップにロードしたい

</edit>

これどうやってするの ?誰かが私にアイデアやリファレンスを与えることができますか?

はい、私はすでにすべての離れたリソース/ドキュメンタリー/例を調べましたが、とにかくそれを理解できませんでした.

アップデート:

問題はコード化することです。理論は知っていますが、ゲーム開発用の actionscript3 はほとんど初めてです。

「ブロック」のクラスを構築する方法は?

4

1 に答える 1

1

3D アプリケーションのほとんどは、実際にはタイル ベースです。たとえば、一般的な地形の実装は、近距離用の高解像度マッシュと遠距離用の低解像度のチャンクのセットです。これらのチャンク (およびシーン内のすべてのオブジェクト) は、シーン グラフで編成されます。通常はoctreeです。 オクトリー地形

また、フラスタムカリングがあります

そして、エンジンはビュー ピラミッド内に部分的 (または完全に) あるノードのみをレンダリングします。

これがAway3Dの実現です

ケース固有の最適化も非常に重要ですが、非常に注意が必要です。たとえば、GPU チェイス ヒット用に最適化された地形メッシュの頂点の順序とチャンク サイズは、GPU 固有 (特定のクライアント用にビルド) であり、同時にテクスチャとシェーディングの量に関連しています (必要がない場合は、マテリアルを交換したくありません)。そのため、同じマテリアルでチャンクを 1 つずつレンダリングしてから、マテリアルを交換することをお勧めします) または、たとえば 1000 個のテクスチャ付き立方体がある場合、異なるマテリアルで 1000 回描画される 1 つのモデルだけが必要です。GPU メモリには適していますが、10000 回のドロー コールが発生し、パフォーマンスが大幅に低下する可能性があります。そのため、octree ノードにうまく収まり、テクスチャを組み合わせた大きなオブジェクトにそれらを結合したい場合があります。しかし、地下にあって見えない立方体を破棄したいのは明らかです。

于 2012-11-15T04:53:37.477 に答える