2016-11-01 40 views
0

我正在爲C++使用DirectXTK,並且正在大量使用sprite批處理函數。DirectxTK SpriteBatch和視口居中

我想開發一個等距渲染引擎。我已經得到了等軸測圖渲染才能正常工作。隨着抵消。但是我遇到了一個主要問題。

我不能爲我的生活找出如何將相機的中心集中到世界的(0,0)或任何其他座標。

和注射()直接從相機生成到SpriteBatch.Begin這個變換矩陣

Matrix Camera::getTransformMatrix() { 

    Matrix Transform = Transform.CreateTranslation(Vector3(World_Pos.x, World_Pos.y, 0)); 
    Matrix Rotation = Rotation.CreateRotationZ(0); 
    Matrix Scale = Scale.CreateScale(ZoomFactor, ZoomFactor, 1); 
    return Transform * Rotation * Scale; 
} 

一切似乎發生後。這是相機的世界位置設置爲(0,0),精靈的世界位置設置爲(0,0)。

這是由此產生的圖像。

http://i.imgur.com/Bep7l5a.png

我關掉alpha混合,和子畫面的偏移量用於調試的原因。

任何人都可以幫助我嗎?此外,如果任何人都可以告訴我如何翻轉y,那也會很棒。

+0

我沒有使用DirectXTK,但是如何應用'Camera :: getTransformMatrix()'返回的轉換矩陣? –

+0

@Zamrony,按原樣直接輸入到spritebatch.begin的參數中。 – moonshineTheleocat

回答

1

請記住,如果您向SpriteBatch提供自定義轉換,仍然應用屏幕視口的默認轉換。默認轉換使得SpriteBatch與從屏幕左上角開始的像素座標一起工作。

如果你想自定義轉換使用「按原樣」與最終的視口變換串聯,你可以使用這種特殊情況下爲定向處理:

spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED); 

請務必閱讀wiki

+0

不是我所要求的,但我解決了它。 – moonshineTheleocat

+0

如果您將旋轉模式設置爲此,則不需要進行任何翻譯,因爲它將座標放回-1到1的標準歸一化空間,中心爲0,0,並跳過默認比例&偏移量把它放到0,0,寬度和高度上,中心位於左上角。 –

1

我找到了我的答案。對於遇到這個問題的人也是如此。您需要補償視口需要被轉換到居中(0,0)到屏幕中心的事實。

也就是說你需要的矩陣是...

查看*轉換(寬* .05,高* 0.05)

查看哪裏是產品的逆矩陣的世界規模,世界輪換和世界轉型。

,使得最終的世界變換矩陣F和視圖矩陣V滿足的產品...

我= F * V

I是單位矩陣。