所以我知道有關於建設XNA 2D相機幾個問題/答案然而人們似乎只是很高興不用解釋了發佈他們的代碼。 我正在尋找更多的解釋我做錯了什麼。XNA 4.0:2D相機Y和X會在錯誤的方向
首先,我瞭解整個世界 - >查看 - >投影 - >屏幕轉換。
我的目標是擁有一個以視口中心爲中心的相機對象,並且當相機的位置向上移動時,它與視口中的向上移動相關,並且當移動到右邊時,它將關聯向右移動視。
我很難實現該功能,因爲視口的Y值是顛倒的。
//In Camera Class
private void UpdateViewTransform()
{
//My thinking here was that I would create a projection matrix to center the camera and then flip the Y axis appropriately
Matrix proj = Matrix.CreateTranslation(new Vector3(_viewport.Width * 0.5f, _viewport.Height * 0.5f, 0)) *
Matrix.CreateScale(new Vector3(1f, -1f, 1f));
//Here is the camera Matrix. I have to give the Inverse of this matrix to the Spritebatch I believe since I want to go from World Coordinates to Camera Coordinates
_viewMatrix = Matrix.CreateRotationZ(_rotation) *
Matrix.CreateScale(new Vector3(_zoom, _zoom, 1.0f)) *
Matrix.CreateTranslation(_position.X, _position.Y, 0.0f);
_viewMatrix = proj * _viewMatrix;
}
有人可以幫助我瞭解如何構建我的視圖轉換以傳遞到SpriteBatch,以便實現我正在尋找的內容。
編輯
這作爲轉換似乎工作但我不確定這是爲什麼。有人也許可以打破它,我的理解:
Matrix proj = Matrix.CreateTranslation(new Vector3(_viewport.Width * 0.5f, _viewport.Height * 0.5f, 0));
_viewMatrix = Matrix.CreateRotationZ(_rotation) *
Matrix.CreateScale(new Vector3(_zoom, _zoom, 1.0f)) *
Matrix.CreateTranslation(-1 * _position.X, _position.Y, 0.0f);
_viewMatrix = proj * _viewMatrix;
我已經建立了一個光線跟蹤之前,所以我應該瞭解你的理解,我的困惑在於事實上,它是2D和SpriteBatch是隱藏它從我這兒做。 謝謝! Farid
您是否嘗試過簡單地使用'1f'而不是'-1f'? – ChrisF
使用1f導致x翻譯被翻轉:( – Setheron