現在、CPUベースの単純なレイトレーサを使用して、プロジェクトとしての三角形をほとんどレンダリングしていません。私は実際の光線を生成することを除いて、それのあらゆる面で大丈夫です。世界座標をスクリーン空間に投影するのではなく、3D座標でのカメラの位置に応じて実際に光線を作成します。回転コンポーネントを使用した3D空間でのキャスティングレイ
今、私はかなり良いアルゴリズムを持っています。これは、Y軸の周りの回転に対してスクリーン上の各ピクセルの光線を生成することを可能にし、X軸も取り込み、ユーザが見上げたり見下ろしたりすると、画像が歪んでしまいます。
これは私がこれまで働いてきたものである:
Ray ray = new Ray(Camera.position,
new Vector3(
Math.sin(Camera.rotation.y+(x*2/Main.renderSize.width)/2) * Math.cos(Camera.rotation.x+(y*2/Main.renderSize.height)/2),
Math.sin(Camera.rotation.x+(-y*2/Main.renderSize.height)/2),
Math.cos(Camera.rotation.y+(x*2/Main.renderSize.width)/2) * Math.cos(Camera.rotation.x-(y*2/Main.renderSize.height)/2)
));
これは私のカメラが任意の上向きまたは下向きの方向に向いていない良好な視野投影を与えます。投影の
画像カメラが前方である:
。
投影画像カメラが若干上向き
を探しています。
誰でもアルゴリズムを手伝ったり、新しいものや良い情報源に向けることができれば幸いです。速度はすべてリアルタイムであるため、速度が必要です。ありがとう。
PS、xとyは画面中心からの距離(ピクセル単位) –
各スクリーンピクセルを世界座標に変換すると、光線の原点があり、方向は焦点から同じピクセル位置ですユニットベクトルに正規化された)回転を忘れてください。代わりに、[4x4均質行列](http://stackoverflow.com/a/28084380/2521214)を使用してください。 – Spektre
@ Spektreのコメントを詳しく説明してください。順方向レンダリングで通常行うように、内在パラメータを投影行列として使用します。次に、すべてのスクリーン座標を逆座標でワールド座標のレイに投影します。 [この回答](http://stackoverflow.com/a/19153090/1210053)が役立ちます。 –