0

(C++) タイトルはほぼすべてを要約しています。

3D 空間の特定のポイントが他の何かの後ろに隠れていない場合、ライトのテクスチャ (またはスプライトなど) をすべての前にレンダリングしたいと考えています。

それ、どうやったら出来るの?描画処理中にZbufferを一時的に無効にすることですべてをレンダリングできますが、ポイントが非表示になっているかどうかを確認する方法がわかりません。

ポイントとカメラの間のある種の衝突を計算する必要がありますか? それとも、ある種のスプライト設定でうまくいくのでしょうか?

4

1 に答える 1

1

私があなたの質問を理解しているなら、あなたは3D空間で2D画像をレンダリングしたいと思います-すべての適切な深度バッファリングを使用します。

私は「看板」を使います。単純なクワッドを3D空間でレンダリングし、ビューアに向けられていることを確認して、「明るい」テクスチャを適用するだけです。アルファブレンディングを有効にする必要があります。そうしないと、画像が貼り付けられた大きな正方形が表示されます。おそらく、探しているものではありません。

別のアプローチ(おそらくより多くの作業が必要ですが、より多くの制御が可能になります)は、ピクセルシェーダーを使用して、バックバッファー上の各ピクセルを手動でレンダリングするか、レンダリングしないことです。この種の「ブレンド」は、FrankLunaのDirectX9の本で非常に簡単に説明されています。

申し訳ありませんが、問題の核心は、ビルボードのレンダリング方法ではなく、可視性の計算に関するものでした。

シーンが十分に単純な場合、「手動で可視性を計算する」とは、テストポイントのカメラと他の1つまたは2つのオブジェクトからの距離を比較することです。

それ以外の場合は、ZBufferで正しい方向に進んでいると思います。テストポイントの深さを手動で計算し(ビュー錐台の定義方法に基づいて0.0から1.0に正規化)、それをスクリーンスペースに投影し、その値をZBufferの値と比較します(同じ投影スクリーンスペース座標で)。計算された深度値がZBufferの値よりも小さい場合は、表示されます。

これが、単一の3Dポイントの可視性を判断するために私が考えることができる唯一の一般的な方法です。

お役に立てば幸いです。

于 2012-09-26T17:43:53.490 に答える