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