gpt4 book ai didi

c++ - 将 2d 屏幕位置取消投影到 3d 世界空间

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:07 25 4
gpt4 key购买 nike

我正在使用 glm 数学库解决以下问题:将 2d 屏幕位置转换为 3d 世界空间。

为了找出问题所在,我已将代码简化为以下内容:

    float screenW = 800.0f;
float screenH = 600.0f;
glm::vec4 viewport = glm::vec4(0.0f, 0.0f, screenW, screenH);
glm::mat4 tmpView(1.0f);
glm::mat4 tmpProj = glm::perspective( 90.0f, screenW/screenH, 0.1f, 100000.0f);
glm::vec3 screenPos = glm::vec3(0.0f, 0.0f, 1.0f);
glm::vec3 worldPos = glm::unProject(screenPos, tmpView, tmpProj, viewport);

现在在这种情况下使用 glm::unProject 我希望 worldPos 为 (0, 0, 1)。然而,它以 (127100.12, -95325.094, -95325.094) 的形式出现。

我是否误解了 glm::unProject 应该做什么?我已经跟踪了该函数,它似乎工作正常。

最佳答案

screenPos 中的 Z 分量对应于深度缓冲区中的值。所以 0.0f 是近裁剪平面,1.0f 是远裁剪平面。

如果你想找到距离屏幕一个单位的世界位置,你可以重新缩放 vector :

worldPos = worldPos / (worldPos.z * -1.f);

另请注意,0,0 的 screenPos 指定屏幕的左下角,而在 worldPos 中,0,0 是屏幕的中心。所以 0,0,1 应该给你 -1.3333,-1,-1,而 400,300,1 应该给你 0,0,-1。

关于c++ - 将 2d 屏幕位置取消投影到 3d 世界空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com