大丈夫、私はこれを理解しようとしている2週間を過ごしました。私はこれを数学だけで処理する方法を試してきましたが、成功しませんでした。私はまたどこでも見て、人々がViewport.Project()
を推薦するのを見ました。XNA 2Dをワールドポジションからスクリーンポジションに変換する
これは単純ではありません。 MSDNの分野やすべてのフォーラムを含め、私が見たどこでも、それを使用できるように提案していますが、試して使用する際には、動作するために必要な行列と値については説明しません。私はこの方法を正しく使う方法についての有益な情報がないことを知っています。それは真剣に私を狂ってしまいます。この貧しい人々を助けてください。
最初に行うことは、私の現在のコードを投稿することです。私は5つまたはそれ以上の異なるバージョンを持っています。私が得た最も近いものは、理解できないNANを得ていた。私は、小惑星がどこにあるかに基づいて画面上にテキストを表示しようとしています。非常に遠い場合、テキストがガイドとして機能し、プレイヤーは小惑星に行くことができます。
Vector3 camLookAt = Vector3.Zero;
Vector3 up = new Vector3(0.0f, 0.0f, 0.0f);
float nearClip = 1000.0f;
float farClip = 100000.0f;
float viewAngle = MathHelper.ToRadians(90f);
float aspectRatio = (float)viewPort.Width/(float)viewPort.Height;
Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, 0), camLookAt, up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(viewAngle, aspectRatio, nearClip, farClip);
Matrix world = Matrix.CreateTranslation(camPosition.X, camPosition.Y, 0);
Vector3 projectedPosition = graphicsDevice.Viewport.Project(new Vector3(worldPosition.X, worldPosition.Y, 0), projection, view, Matrix.Identity);
screenPosition.X = projectedPosition.X;
screenPosition.Y = projectedPosition.Y;
if (screenPosition.X > 400) screenPosition.X = 400;
if (screenPosition.X < 100) screenPosition.X = 100;
if (screenPosition.Y > 400) screenPosition.Y = 400;
if (screenPosition.Y < 100) screenPosition.Y = 100;
return screenPosition;
私が知る限り、Projectはカメラの位置です。私のゲームは2Dなので、vector3は面倒です。ZはCameraZoom、投影は2D Screenに変換したいオブジェクト、ビューはカメラがどれだけ見ることができるか、そして私は最後のものになるかもしれないと思ったわからない。
コードや知識が改善されず、MDSNチュートリアルを見ているうちに混乱している情報を約2週間見つけた後、私は世界の位置を実装していない画面の位置に変換します。すべての助けがありがたいです:)
プラス私は2Dゲームを使用しています。2DゲームにZ軸がない場合、ほとんどの人がZ軸について話すと混乱を招きます。ズームまたは移動。おかげでもう一度:)
2dゲームで世界の中にカメラを置くだけでしようとしていますか? – Ben
私は既にカメラの設定をしています.2次元世界の2Dカメラの位置を見つけようとしています。次に、世界のオブジェクトの位置をスクリーン座標に変換して、オブジェクトや名前などのテキストを表示します。PS my cameraそれは回転することができますが、私は回転を使用しないズームもあります – user1109013
あなたは、画面の位置を取得するオブジェクトの世界の位置からカメラの世界の位置を減算しないでしょうか?次に、ズームを考慮する必要があります。私がいつもしてきたのは、世界の位置を(鼻を除く)すべてに割り当ててから、レンダリング時に画面の位置に変換することです(画面の位置ではなくワールドの位置を使用するカスタム描画コマンドを書きました)。 – Ben