タグ付けされた質問 「projection-matrix」

2
なぜzで割るために4番目の座標が必要なのですか?
私はここで応答を読みました: グラフィックスカードは、ベクトルの4番目の要素を最終位置として何をしますか? 「4番目のコンポーネントは、透視投影を追跡するためのトリックです。透視投影を行うとき、zで除算する必要があります。x '= x / z、y' = y / zですが、これは操作ではありませんx、y、zのベクトルで動作する3x3行列で実装できます。これを行うための標準になったトリックは、4番目の座標wを追加し、x、y、zが常にwで除算されることを宣言することですすべての変換が適用された後、ラスタライズ前。 しかし、3x3マトリックスを使用してzで除算できない理由を理解できませんでした。 ただ掛けることはできません 1/z 0 0 0 1/z 0 0 0 1/z 取得するため [x/z y/z 1] ?

5
カメラの背後にあるポイントを正しく投影するにはどうすればよいですか?
興味のあるポイントの上に感嘆符を付ける3Dゲームを作成しています。 2D画面のどこにマーカーを配置するかを見つけるために、マーカーを配置する3Dポイントを手動で投影しています。 次のようになります。 よさそうだ。マーカーが画面の外側にある場合は、座標をクリップして画面に合わせます。次のようになります。 これまでのところ、アイデアはかなりうまくいっています。ただし、対象のポイントがカメラの背後にある場合、結果のX、Y座標が反転し(正/負など)、次のように画面の反対側の隅にマーカーが表示されます。 (投影されてからクランプされた点がマーカーの先端です。マーカーの回転を気にしないでください) 錐台の後ろの座標がXとYで反転しているので、それは理にかなっています。したがって、私がしていることは、カメラの後ろにある座標を反転することです。しかし、座標を反転する必要があるときの正確な条件はまだわかりません。 これは現在、私の投影コードは次のようになっています(C#でSharpDXを使用)。 public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, PositionY, …

2
半直交半透視投影行列を作成する方法
私は、縦軸が正射投影される射影行列の式を作成しようとしましたが、横軸はそれに対して遠近法を持っています。 したがって、ビュー錐台は次のようになります。 私は、正投影と透視投影の公式と、それらがどのように達成されたかを研究しました。そして、それらを変更して、私が望む投影に到達しようと試みました。私には、1つの軸をZにスケーリングすることはできず、もう1つの軸をZにスケーリングすることは不可能であるように思われました(または、それらを異なる倍率でスケーリングさせることはできませんでした)。 私が望む視点に到達することは可能ですか?もしそうなら、射影行列はどのようになりますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.