1

各フレームが異なる (テクスチャ) タイルで描画される単純な 2D プラットフォーマーを Javascript で作成する予定です。ここに私の質問があります:

  • 異なるテクスチャで異なる長方形/四角形をレンダリングするにはどうすればよいですか? つまり、岩のタイルと草のタイルに個別のフラグメント シェーダーを作成し、タイルの種類ごとに頂点データを個別のバッファーに保持する必要があるのでしょうか。すべてのタイル頂点データを 1 つのバッファーに入れたいのですが、このタイルがその草のテクスチャを取得する必要がある草のタイルであることを指定するにはどうすればよいですか?

  • テクスチャ ユニットにバインドすると、テクスチャはどのくらいの大きさになりますか?

4

2 に答える 2

1

異なるテクスチャで異なる長方形/四角形をレンダリングするにはどうすればよいですか?

次の 2 つの選択肢があります。

  1. たとえば、タイルの種類 (grassTex と rockTex) ごとにテクスチャを作成します。次に、シーンを描画するときに、特定のタイプのすべてのタイルを描画する前に、適切なテクスチャをバインドします。

    glBindTexture(..., grassTex); 
    drawAllGrasstiles();
    glBindTexture(..., rockTex); 
    drawAllRocktiles();
    
  2. 「スプライト シート」として知られているものを使用します。このシートでは、さまざまなテクスチャをグリッド内にまとめて大きなテクスチャにまとめます。したがって、テクスチャの左半分が草で、テクスチャの右半分が岩である 1 つのテクスチャがあるとします。次に、すべての草と岩のタイルを同じバッチで一緒に描画し、テクスチャ座標を使用して、テクスチャのどの部分が描画されるかを区別します。すべてのタイルのテクスチャ座標が 0 から 1 ではなく、草の場合は 0 から 0.5、岩の場合は 0.5 から 1.0 になります。

テクスチャ ユニットにバインドすると、テクスチャはどのくらいの大きさになりますか?

これは実装に依存します。glGet を呼び出してGL_MAX_TEXTURE_SIZE、実装制限を照会します。

于 2012-09-20T18:30:33.303 に答える
0

互換性を最大限に高めるために、最大のテクスチャは 1024 x 1024 にすることをお勧めします。XBOX 360 と PS3 では 1024 で十分です。

また、レベル全体を 1 つのパスでレンダリングし、1 つのテクスチャだけを使用することをお勧めします。そこに問題があるとは思いません。この 1 つのテクスチャに水、岩、鳥が含まれているかどうかに関係なく、機能するはずです。

于 2012-09-20T18:14:29.297 に答える