首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >反vp矩阵和相机位置的光线方向不正确

反vp矩阵和相机位置的光线方向不正确
EN

Stack Overflow用户
提问于 2018-10-15 04:37:04
回答 1查看 305关注 0票数 1

我的光线生成有一个我不理解的问题。光线的方向计算错误。我将这段代码从DirectX 11移植到Vulkan,在那里它工作得很好,所以我很惊讶我不能让它工作:

代码语言:javascript
复制
vec4 farPos = inverseViewProj * vec4(screenPos, 1, 1);
farPos /= farPos.w;

r.Origin = camPos.xyz;
r.Direction = normalize(farPos.xyz - camPos.xyz); 

然而,这段代码可以完美地工作:

代码语言:javascript
复制
vec4 nearPos = inverseViewProj * vec4(screenPos, 0, 1);
nearPos /= nearPos.w;
vec4 farPos = inverseViewProj * vec4(screenPos, 1, 1);
farPos /= farPos.w;

r.Origin = camPos.xyz;
r.Direction = normalize(farPos.xyz – nearPos.xyz);

编辑矩阵和摄像机位置设置如下:

代码语言:javascript
复制
const glm::mat4 clip(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f);
projMatrix = clip * glm::perspectiveFov(FieldOfView, float(ViewWidth), float(ViewHeight), NearZ, FarZ);
viewMatrix = glm::inverse(glm::translate(glm::toMat4(Rotation), -Position));

buffer.inverseViewProjMatrix = glm::inverse(projMatrix * viewMatrix);
buffer.camPos = viewMatrix[3];

Edit2如果我从原点开始,我在屏幕上看到的是正确的。然而,如果我向左移动,例如,它看起来就像我在向右移动。我所有的光线似乎都被扰乱了。在某些情况下,扫射相机看起来就像我在空间中的另一个点上移动一样。我假设相机的位置不等于我的透视矩阵的奇点,但我不知道为什么。

我想我误解了一些基本的东西。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 05:56:04

感谢这些评论,我找到了问题所在。我错误地构建了我的视图矩阵,其构建方式与this post完全相同

glm::inverse(glm::translate(glm::toMat4(Rotation), -Position));

这相当于先平移,然后旋转,这当然会导致一些不想要的东西。此外,Position是负的,并且camPos是使用视图矩阵的最后一列而不是逆视图矩阵获得的,这是错误的。

我的分形光线投射器没有注意到这一点,原因很简单,因为我从未远离原点。这一点,以及在这样的环境中没有参考点的事实。

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

https://stackoverflow.com/questions/52806882

复制
相关文章

相似问题

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