c++ - 光线追踪:转换问题

标签 c++ transformation raytracing raycasting

我在合并转换时遇到问题。不管出于什么原因,一切都没有像我想的那样进行,但老实说——所有的来回变换让我很头晕。

正如我到处阅读的那样(虽然明确的解释很少见,恕我直言),转换的主要算法如下:

  • 用变换矩阵的逆变换射线(原点和方向)
  • 用变换矩阵变换得到的交点
  • 将物体在交点处的法线转换为逆的转置

据我了解,这应该可以解决问题。我很确定我的问题出在我尝试计算光照时,因为初始交叉点和光照算法都使用相同的函数 (obj.getIntersection())。但话又说回来,我不知道。 :(

您可以在这里阅读我的部分代码:

main.cpp , scene.cpp , sphere.cpp , sdf-loader.cpp

如果您需要更多信息来帮助我,请告诉我 - 请帮助我! ;)

编辑:

我做了一些结果,也许有人“看到”(通过结果)我可能错了的地方:

未转换的场景:

untransformed scene

球体缩放 (2,4,2):

sphere scaled (2,4,2)

翻译框 (0,-200,0):

box translated (0,-200,0)

转换后的球体 (-300,0,0):

sphere translated (-300,0,0)

球体 x 轴旋转(45°):

sphere x-rotated (45°)

最佳答案

一般来说,对于计算机图形学中的转换,我建议您看看 scratchapixel.com,尤其是本课:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-4-geometry/

还有这一个,您可以在其中看到如何使用变换(矩阵)来变换光线和物体:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-8-putting-it-all-together-our-first-ray-tracer/

如果您还不知道这个令人惊叹的资源,我建议您使用它,也许可以在您的大学里宣传一下。你的老师应该已经向你指出了。

关于c++ - 光线追踪:转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418855/

相关文章:

c++ - 如何从 boost 线程访问我的类实例?

Azure 逻辑应用 Liquid 连接器 – 将 HTML 转换为 XML

c# - 我的软阴影代码有什么问题?

android - 如果不支持 EGL_NATIVE_RENDERABLE,如何通过 C++/NDK 访问 OpenGL ES 2?

c++ - RAII 与异常

C++输出到文本文件时的换行符

html - 有哪些技术可用于在 iOS 应用程序中以编程方式转换 HTML/DOM?

php - 在 XSL 中定义 PHP 函数并调用它。可能的?如何?

math - 从像素坐标中获取 uvw 坐标以进行光线追踪

c++ - 三角形的内外检验