這讓我瘋狂!任何幫助,將不勝感激。DirectX:對象空間到屏幕空間
我有一個畫在屏幕上的3d模型。這絕對有效,模型位於屏幕邊界內。我想計算幾個頂點的CPU上的屏幕座標。
要做到這一點,我以同樣的方式我的頂點着色器確實由模型/視圖/投影矩陣相乘這些頂點的位置:
XMVECTOR pos = XMVectorSet(input.x, input.y, input.z, 1);
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.model));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.view));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.projection));
我再由POS劃分pos.X和pos.Y .Z。
如何解釋pos的結果?我期待它的X和Y座標位於0和1之間,或者可能是-1和1,但我得到的數字如-3。我做錯了什麼嗎?
根據記錄,這是頂點着色器的一部分:
float4 pos = float4(input.pos, 1.0f);
pos = mul(pos, model);
pos = mul(pos, view);
pos = mul(pos, projection);
output.pos = pos;
預先感謝您的幫助! :)
啊哈。是的,我曾想過,但我的w分量幾乎爲零:除以w使我的x和y座標達到一百萬! 我解決了這個問題。在計算CPU上的屏幕座標之前,我忘記重新轉換矩陣(因爲HLSL需要矩陣轉置)。 感謝您的幫助! :) – 2013-02-10 03:32:20