首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >屏幕空间到世界空间

屏幕空间到世界空间
EN

Stack Overflow用户
提问于 2020-12-31 10:42:11
回答 1查看 2.6K关注 0票数 2

我正在用C++编写绘图程序,不知道如何从屏幕空间转换到世界空间

我可以访问投影和视图矩阵以及屏幕大小等。

这是我正在使用的代码,但它不起作用

没有错误,但它根本没有输出世界空间坐标,它只是轻微地改变了所有像素坐标

我在跟踪我在这里找到的答案,OpenGL数学-将屏幕空间投影到世界空间和弦

我现在只用正射相机

代码语言:javascript
运行
复制
glm::mat4 proj = cameraComp.Camera.GetProjection();
glm::mat4 view = glm::translate(glm::mat4(1.0f), transformComp.Position)
       * glm::rotate(glm::mat4(1.0f), glm::radians(transformComp.Rotation.z), glm::vec3(0, 0, 1));

glm::mat4 inversed = glm::inverse(proj * view);

glm::vec4 worldPos = { newMousePos, 0, 1 };
worldPos *= inversed;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 11:20:30

视图矩阵从世界空间转换为视图空间。因此,逆视图矩阵从视图空间转换到世界空间。

投影矩阵将视图空间转换为裁剪空间,逆投影矩阵由视空间转换为视图空间。剪辑空间是一个齐次坐标系统。为了从剪辑空间转换为规范化的设备空间,必须执行透视划分。规范化的设备空间是笛卡尔坐标系统。如果您想从规范化的设备空间转换为视图空间,则需要通过逆投影矩阵进行转换,并通过w分量将x、y和z分量除以。

另见OpenGL -鼠标坐标到空间坐标

由于您使用的是GLM,我建议在转换时使用glm::unProject

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65519789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档