3

惑星を表示する 2D グラフィカル アプリを作成しています。アプリの大部分が 2D になるので、2D と言います。ただし、いくつかの 3D オブジェクトを画面外 (テクスチャ) のダイナミック スプライトにレンダリングし、透明な (場合によっては半透明の) 領域を作成し、その後、それらのレンダリングされたテクスチャを 2D テクスチャ クワッドとしてアクティブ スクリーンにレンダリングしたいと考えています。この場合、3D オブジェクトとして画面に直接レンダリングすることは最適ではありません。これは、ある種の 3D ピッキングを実装する必要があるためです。私はまだ数学がそれほど進んでいません。また、メイン スクリーンのレンダリングは正投影で、オフスクリーンのレンダリングは遠近法であることに注意してください。

どうすればこれを達成できますか (一般的な考え方で、詳細は必要ありません)、これを行う最も効率的な方法は何ですか? これにより、さまざまなデバイスのサポートが減少しますか? また、3D スプライト レンダリングがフレームごとに絶えず更新される場合 (細かい量を回転させるなど)、テクスチャをメモリにアンロード/再ロードし続けるとフレームレートが低下しますか? シーンによっては、これらの 3D オフスクリーン スプライトを 10 個も持つことができると思います。

助けてくれてありがとう

4

1 に答える 1

2

どうしてもオフスクリーン レンダリングを使用する必要がある場合は、FBO (フレーム バッファ オブジェクト) を検索してそれにテクスチャをアタッチし、メイン ビューでテクスチャを 2D として使用します。これは非常に単純な手順ですが、速度が低下する可能性があります。おそらくマルチスレッドを実行することはできないため、FBO を 1 つだけ作成する必要があります。その次元はおそらく 2 の累乗でなければならないため、解像度は希望とは異なる場合があります。この手順は継続的に何かをロード/アンロードするのではなく、データはテクスチャの作成時に割り当てられ、GL はそこから直接描画/読み取りを行います。ここでの最大の欠点はメモリです.10 ものテクスチャを作成して、それらに描画して 1 回表示するだけです。

ただし、このオブジェクトをメイン バッファーの特定の場所に配置するのは非常に簡単かもしれません。全画面の惑星を描画するようにすべてのロジックを作成し、「viewport」メソッドを使用して画面の特定の部分に配置します。 .

これらの惑星の画像がユーザーの要求に応じてのみ更新される場合 (フレームごとに描画したくない場合) は、両方を組み合わせて作成することをお勧めします。 「viewport」メソッドを使用して、すべての惑星をこの単一のテクスチャに描画します。次に、必要に応じて更新できます。バッファをクリアせずに、バッファ/テクスチャの特定の部分に明確な四角形を描画します。そして、テクスチャ全体をメイン バッファに描画し続けます。

于 2013-04-08T13:43:30.420 に答える