gpt4 book ai didi

graphics - 帮我用光线追踪器解决这个错误

转载 作者:行者123 更新时间:2023-12-02 19:45:59 26 4
gpt4 key购买 nike

我不会针对这个问题发布任何代码,因为它需要太多的上下文,但我将从概念上解释我正在做什么。

我正在构建一个使用仿射变换的简单光线追踪器。我的意思是,我将来自相机坐标的所有光线与通用形状相交。这些形状都具有关联的仿射变换,并且光线在与场景对象相交之前首先乘以这些变换的倒数。

例如,假设我想要一个半径为 3 的球体,位于 (10,10,10)。我创建了球体并给它一个表示此变换的变换矩阵。

我在相机坐标中创建一条射线。我将射线乘以球体变换矩阵的逆矩阵,并将其与通用球体相交(在 (0,0,0) 处 r=1)。我在交点处获取沿着这条通用射线的距离,并使用它找到通用法线和沿着原始射线的点,并将它们保存到一个变换对象中(以及距离(t)和实际的转换)。

当需要计算出该交点的颜色时,我采用变换的反转置并将其乘以通用法线来找到法线。如果我使用逆变换射线交点的 t 值,则交点就是沿原始非变换射线的点。

问题是,当我这样做时,转换会产生奇怪的效果。主要效果是变换似乎将灯光一起从场景中拖出。如果我构建一堆图像并在每一帧中对球体应用稍大的旋转,则似乎会拖动场景中的灯光。这是一个例子

老实说,我不知道我在这里做错了什么,但我正在抓狂。我想不出发生这种情况的任何充分理由。任何帮助将不胜感激。

最佳答案

免责声明:我不是光线追踪方面的专家,而且我也误解了问题描述中的转置转置。

当您计算交点的法线时,您处于“变换后的坐标空间”中,特别是,对吧?所以法线也将位于该坐标空间中。稍后您只需将该向量转置到真实的交点,但法线仍会旋转。

假设您有一个通用球体,其在正 x 上为红色,在负 x 上为蓝色。让我们考虑相机位于 20,0,0 处,而 1 球体仅绕 y 轴 180 度(无转置)。那么光线 (1,0,0) 将是变换后的光线 -1,0,0 并将在 (-1,0,0) 和 t = 9 处从负 x 击中球体。法线应为 (-1 ,0,0)。当您将该法线转置为实际交点时,法线仍为 (-1,0,0)。因此,通过遵循该法线,您应该获得正确的颜色,而且还可以获得来自球体“背面”的光线。

关于graphics - 帮我用光线追踪器解决这个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5647265/

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