タグ付けされた質問 「perspective」

2
ほとんどの2.5D等尺性ゲームの視野の遠近法の角度[終了]
いくつかの非常に人気のあるゲームを調べて、それらが使用している視点角度を決定しました。目的のために、等角表示で45度と60度のグリッドを作成し、スクリーンショット(この場合はDiablo IIの)に配置しました。これらのグリッドはいずれもゲームの観点に適合しません。だから私は、パースペクティブに最適な角度を見つけようとしましたが、角度は53.5度に近いです。しかし、この数字はどこからでも来ていないようで、遠近法の角度を定義する数字の背後には強力な論理があると思います。私は9/16 * 90度と3/4 * 90度(画面解像度16:9と4:3の比率から)を試しましたが、私の仮定はどれも正しいようには見えません。ここに私が意味するもののスクリーンショットがあります: 60度 45度 2つの間の何か-53.5度-実数にかなり近い 実際の学位が何であり、どこから得られるのかを本当に知る必要があります。どんな助けも大歓迎です!ありがとうございました!

5
3Dの偽造の例
3Dが2Dで偽造されている良い例を知っている人はいますか(必ずしもコードではありませんが、検索できるゲーム)。プレイヤーは、画面に「入り込み」、物が出てくるという視点を持っています。現時点では、2Dの敵を単純にスケーリングして、彼らが近づいているように見せかけていますが、それでもかなりフラットな感じがします。実際に3Dエンジンを使用せずに3D錯覚を与える方法に関するヒントはありますか? 編集:「Mode7」という用語に出会ったばかりで、このビデオは私が理解しようとしていることのほとんどを示しています。(特に0:13と1:03のゲーム)。このようなものを実装する良い方法は何ですか?

5
2倍近いオブジェクトは2倍大きく見えますか?
だから、私はあなたがZ軸に沿って動くことができる2Dゲームを作成することを考えていました、あなたがいる層を変えることによって。深度に応じて、2Dスプライトをスケーリングします。 かつて、誰かが私に多くの2Dスプライトを持つデモを見せてくれ、スクロールすることでカメラの深さを変えることができました。そのため、ズームインすると、オブジェクトはプレーヤーに近づき、大きく表示されます。それから、オブジェクトが1ユニット近くになったとき、オブジェクトはどのくらい大きくなるのかと思いました。どのように計算しますか?だから男は私に言った:私が使用している1つの基本的なルールがあります:「オブジェクトは2倍近く、2倍大きく表示されます。」 今、私はそれを自分でテストすることで、ルールが現実の世界に適用されないことを知っています;)しかし、遠近法などのために現実の世界の計算で使用される定数はありますか?または式? これはそのような質問をするのに最適な場所ではないかもしれませんが、これはゲーム関連の質問に使用する唯一のサイトであり、私のコンテキストはゲームなので、試してみると思いました。また、3Dゲームに関連している可能性があるため、3Dの視点とマトリックスなどについてすべてを知っている人がここにいることを期待しています。 tl; dr: 「オブジェクトは2倍近く、2倍大きく表示されます」これは現実の世界では正しくありません。しかし、どの定数または式が正しいですか?

2
90°horz / 60°vertがデフォルトのFPS視野を反転するのはなぜですか?
私の知る限り、垂直視野は次のように調整する必要があります。 fov = 2 * arctan(0.5*screenHeight / distanceEyeScreen); つまり、視野はユーザーの画面の距離と画面のサイズに一致する必要があります。 多くのFPSでは、水平FoVのデフォルト値は90°、垂直FoVのデフォルト値は60°です(16:9と仮定)。1つの例はCryEngineです。ただし、16:9 20インチ画面(可視領域の対角、つまり約40 cm x 25 cm)の場合、このデフォルト値では、ユーザーが視点を正確に見るために画面から20 cm目を見る必要があります。 そのため、計算を間違えたか、不適切なFoV値を意図的に選択する理由があるに違いありません。 90°horz / 60°vertのデフォルトFoVの理由は何ですか?
14 3d  camera  perspective 

1
ビューポートの伸縮を防ぐにはどうすればよいですか?
基本的に、ビューポート/ウィンドウのサイズが変更されたときに、レンダリングされたイメージの歪みやストレッチを削除する方法を知りたいです。 次の画像は、私が話している歪み/伸縮の例です。 元の画像(正方形ウィンドウ) 歪んだ/引き伸ばされた画像(長方形のウィンドウ) 理想的には、2番目の画像は水平方向に引き伸ばさずに球体を表示し、より大きなウィンドウサイズを考慮してより多くのシーンをユーザーに公開する必要があります。 これをどのように行うことができますか? 私はOpenGLと連携して画像をレンダリングし、呼び出しを介して透視投影を利用しています。 glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, window.width/window.height, 0.01f, 100.0f) アスペクト比width/heightは、私が出くわしたすべての文書/チュートリアルに従っているので、間違っているとは思わない。しかし、私の疑いは、ストレッチングの問題に影響しているということです。 結果論 正直に言って、この問題についてもっと考えてみると、解答には、フォービィ(y方向の視野)角度とアスペクト比との正比例関係が関係していると信じられていました。 上記の画像を参照として使用すると、幅が拡大する場合(水平方向のストレッチが発生する場合)、レンダリングされた画像の比例性を「固定」する垂直方向のストレッチを引き起こすためにfovy角度を大きくする必要がありそうです。 同様に、幅を小さくするには、フォビ角を小さくする必要があります。 更新: したがって、これをさらに調査した後、次のように視錐台の設定方法を変更することにしました。 gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f) そして、私の期待は正しかったので、比例の問題は解決しました。ただし、希望する結果が得られません。ウィンドウの幅が大きくなると、レンダリングされるイメージは小さくなります(ただし、球体は実際には円形です)。代わりに、球体のサイズをまったく変更しないでください。表示されるシーンの量のみを変更する必要があります。

1
遠近法マトリックスが右手系座標系か左手系座標系かを知るにはどうすればよいですか?
たとえば、パースペクティブマトリックスを次のように定義するとします。 m[0] = 1.f / ( aspect * focalLength ); m[5] = 1.f / focalLength; m[10] = -zFar / (zFar - zNear); m[11] = -1; m[14] = -(zFar*zNear)/(zFar - zNear); 遠近法マトリックスが右手系座標系か左手系座標系かをどのように確認できますか?

2
ベクターゲーム(ワイヤーフレーム、エリートのような)の理論と実装?
EliteやStar Wars Atariなどのベクターゲームが根本からどのように構築されたかについて詳しく知りたいです。問題は、OpenGLやDirectXのような最新の3D APIを使用してベクターグラフィックスを実装する方法ではありません。これを行うのは非常に簡単であり、ゲームのようにゼロからベクター/マトリックスシステムを構築する必要がないためです。 これらのゲームについて私が推測するいくつかのこと: 彼らは非常に低レベルで動作し、ASMで書かれています 彼らは実際の3Dゲームであり、After Burnerのようにそれを偽っていません。Wolfenstein 3Dとは異なります。アフターバーナーはrotozoom /ラスターエフェクトを使用し、Wolfenstein 3Dはレイキャスティングと2Dスケーリングを使用しました。上に移動できないため、実際には3Dではありません。Duke Nukem 3Dが使用したビルドエンジンが気に入っても、壁以外はすべてスプライトです。Star Foxは実際の3Dモデルを使用しているので、それに近いですが、実装はSNESのSuper-FXチップを使用しており、おそらくスキャンライントリックを採用しています。Eliteはおそらく(少なくともElite NESのような一部の実装では)上記のスキャンライントリックを使用していることを知っていますが、カスタムビルドのアーケードマシンを使用していたため、SWAについてはわかりません。どちらにせよ、私はそれについてもっと知りたいです。 それらの3Dモデルは実際の3Dモデルです。それらはベクトルとして定義され、カメラの位置に従って変換されます。 エリートのソースを分解して自分でどのように行われたかを確認することをお勧めしますが、その前に、それらがどのように作成されたか、および同様の手法を示す最新のオープンソースプロジェクトがあるかどうかを知りたいと思います。 。Oolite(OpenGLとObj-Cを使用)のようなEliteのリメイクを意味するのではなく、OpenGLのようなAPIを直接使用することを避け、OpenGLのようなAPIを直接使用しないプロジェクト-必ずしも低レベルのプロジェクトではなく、SDL(OGLなし)のような2Dライブラリを使用する少なくとも今のところは十分です。 MESA3Dのソースコードには、EliteやSWAなどのゲームが実装したルーチンの多くが含まれていることを知っています。ゲームのコンテキストでそれらを確認したいだけです。EliteとSWAが基本的に行ったのは、ラスタライズを実装し、モデルとローダーのフォーマットを作成したことです(少なくともSWAには、ツールを使用してモデラーから構築されたモデルがあると確信していますが、TIEファイターをハードコーディングすることは不可能ではありません)正確に行うのは難しいことです)、そして他の多くのことに気付かないかもしれません。しかし、それに入るのは本当に時間がかかり、そこにあるものの多くは気にしません。Eliteのようなゲームは、コンピューターとコンソールが当時持っていたROMとRAMが低いため、非常に軽量であったことを覚えておいてください。 私は3Dグラフィックスに不慣れです。すべての私の仮定は、3Dジオメトリと学校レベルの数学についての私の限られた知識に基づいています。しかし、私はこれらのゲームがどのように機能するかについて、詳細について知りたいと思っています。存在すれば、エリートや同様のゲームの開発についての本を購入します。いくつかの一般的な提案で十分です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.