2

ポータル ゲームがどのように機能するのか気になります。あるポータルと別のポータルの間に立つことができます。とても魅力的です。

ポータルを 1 つ撃つたびに、レベルがコピーされるのでしょうか? それともカメラ/錐台/ビューポート効果のみですか?

OpenGLで開発したいのですが、何か提案はありますか?

4

3 に答える 3

10

これを実装するのは悪夢でした。「監督コメンタリー」でゲームを最後までプレイすると、それにまつわる興味深いインタビューが飛び交います。

これが基本的な考え方です。青いポータルを見るとき、レベルのコピーを見ているのではなく、別の視点からレンダリングされた同じものを見ているだけです。エンジンは、オレンジ色のポータルの「後ろ」の視点からポータルを通して見た部分をレンダリングします。これは、青色のポータルの前の位置に対応します。この仮想視点とオレンジ色のポータルの背面の間にあるものが表示されないように、特に注意する必要があります。ビュー フラスタムは、青いポータルを通して見えるビットのみを含むように調整されています。

しかし、それだけではありません。あるポータルから別のポータルを見ることができたらどうなるでしょうか? 「無限」のフィードバック効果が得られます。実際には、効果は実際には無限ではありません。画像が十分に小さくなり、違いがわからないまで、十分な反復(たとえば40回)を行うだけです。次の反復ごとに小さいサイズでレンダリングできるため、フル解像度でレベル全体を 40 回レンダリングする必要はありません。ただし、クリッピングやカリングなどに関連する作業はまだあります。

OpenGL では、これは、フレームバッファ オブジェクト (FBO) を使用してテクスチャにレンダリングするか、ステンシル バッファを使用してクリッピングされた最終結果に直接レンダリングすることで実現できます ( datenwolfに感謝します!)。しかし、上記の段落が示すように、それは物語の始まりにすぎません。OpenGL を使い始めたばかりの場合は、難易度が完全に間違っていると思います。

(余談ですが、ポータルの途中にあるオブジェクトが一度に 2 つの場所に存在する必要があるという物理エンジンでも興味深いことが起こっています。もう 1 つの大きな頭痛の種です。)

于 2012-10-31T20:57:14.967 に答える
7

キーワードは、ステンシル バッファ、クリップ プレーン、および再帰的レンダリングです。

ステンシル バッファは、「ポータル」であるビューポートの一部を切り取るために使用されます。これは、シーンのメイン ビューがレンダリングされるときに、いくつかのヘルパー ジオメトリをレンダリングすることによって実現されます。

次のステップでは、シーンがさらにレンダリングされますが、今回は追加の変換、つまりポータルの相互の相対的な位置合わせを記述する変換によってシーンが移動されます。次に、クリップ プレーンがポータル プレーンに配置され、シーンがレンダリングされます。このレンダリング中に、別のポータル ステンシルがレンダリングされる場合があり、これにより、さらなる再帰がトリガーされます。鏡の間の状況で無限ループを防ぐために、再帰制限があります。

于 2012-10-31T21:13:59.743 に答える
0

詳細はわかりませんが、これはいくつかの方法で達成できます。ポータルの場所でカメラを使用し、そのビューからシーンをキャプチャしてポータルの場所でレンダリングするために、テクスチャへのレンダリング機能を使用していると思います。また、より多くの反復が可能になりますが、それがどのように機能するかはまだわかりません(1ピクセルまたは事前定義された深度値に達するまで、テクスチャへのレンダリングの解像度を下げる可能性があります)。

于 2012-10-31T20:51:48.103 に答える