0
我在3D空間中有一架飛機,它面向相機,我希望能夠放置在與單擊位置相同的位置。但是,平面的位置會超出鼠標光標。這是一個動態GUI,我希望能夠在UI上移動並與小部件進行交互。glm :: unproject問題,世界到屏幕空間對齊錯誤
void mouse::unProjectMouse(float width, float height, camera* viewportCamera)
{
if(NULL == viewportCamera)
{
std::cout<<CNTRLCALL<<"camera failed! failed to un-project mouse";
} else {
glm::vec4 viewport = glm::vec4(0, 0, width, height);
glm::mat4 tmpView = viewportCamera->updateView();
glm::mat4 tmpProj = viewportCamera->updateProjection();
glm::vec3 screenPos = glm::vec3(mouseX, height-mouseY - 1.0f, 1.0f);
glm::vec3 worldPos = glm::unProject(screenPos, tmpView, tmpProj, viewport);
worldPos = worldPos/(worldPos.z * -1.0f);
mouseWorldX = worldPos.x;
mouseWorldY = worldPos.y;
mouseWorldZ = worldPos.z;
}
}
我很茫然這裏,爲什麼飛機不能用鼠標正確對齊。
你是如何在抵達screenPos.z的值爲1.0f? 這是什麼? 「worldPos = worldPos /(worldPos.z * -1.0f)」。 有沒有必要亂搞unproject回饋你的東西。只要確保你的輸入是正確的。 – Aeluned
我把它留作1.0f,因爲我沒有z組件的輸入,你會推薦什麼樣的輸入。我還對worldPos z組件進行了改動,以在相機前獲得1個單元進行測試。 – GenericController
z組件很重要,這就是導致你的unProject失敗的原因。嘗試將z設置爲0.另外,刪除您正在執行的部門。這是不正確的。 – Aeluned