问题标签 [raytracing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
graphics - 通过透明表面计算阴影
在光线追踪中,我想计算光线命中点的阴影。我在所有光源上“画”线并检查它们是否被物体阻挡。如果它们没有被阻挡,那么我会根据它们的强度以及“命中光线”与表面法线之间的程度来计算照明的强度。
但是,如果光线被部分透明的表面挡住了怎么办?那么光线应该会来照亮这个点,但是它的强度和颜色会受到它通过的表面颜色的影响,为了计算我需要对光线通过的点进行光线追踪(实际上对于 2 点,一个入口和一个出口),这将非常昂贵,并且可能几乎永无止境(我猜在正确定位光源和表面时,您可以将示踪剂置于几乎无限每次命中循环)。
有没有一种快速而好的方法来近似颜色,或者我应该只将表面的颜色作为光色,将其透明度作为强度?
coordinates - 光线追踪问题,如何将屏幕坐标映射到世界坐标?
当我遇到这段代码时,我正在http://www.devmaster.net/articles/raytracing_series/part1.php上学习光线追踪:
我对作者如何将屏幕坐标映射到世界坐标感到很困惑......
谁能告诉我作者是如何得出这些线的?
或者告诉我如何将屏幕坐标映射到世界坐标?
先感谢您!
c++ - 想写一个光线追踪器,坚持使用什么代数库(C++)
我一直想用 C++ 编写自己的多线程实时光线追踪器,但我不想实现它附带的所有矢量和矩阵逻辑。我想我会做一些研究来为此找到一个好的图书馆,但我没有取得太大的成功......
重要的是实现速度快,最好附带一些友好的许可。我读过它boost
有基本的代数,但我找不到任何关于它的速度有多好。
其余的,谷歌给了我Armadillo
,它声称非常快,并将自己与我没有听说过的某些其他库进行比较。
然后我得到了Seldon
,它也声称高效且方便,尽管我无法找到它们在秤上的确切位置。
最后我读到了Eigen
,我在 StackOverflow 上搜索时也看到了这里提到的内容。
在我大学的 CG 讲座中,他们使用HLSL
代数(让学生实现/优化光线追踪器的部分),这让我思考是否可以使用GLSL
它。同样,我不知道哪种选择最有效,或者对代数库的普遍共识是什么。我希望 SO 可以在这里帮助我,这样我就可以开始一些真正的开发了 :)
PS:我尝试链接到网站,但我还没有足够的代表
3d - 是否有特定的或非常适合光线追踪的 3D 场景格式?
我正在研究光线追踪器,我不想在 3D 场景的文件格式方面重新发明轮子。我还希望能够使用其他人制作的场景来测试我的程序。我是程序员而不是 3D 建模师。
是否有特定的或非常适合光线追踪的 3D 场景格式?
c - 编写 openCL 代码时,它在没有 GPU 的单核机器上表现如何?
大家好,我目前正在将一个光线追踪器从 FORTRAN 77 移植到 C 以进行研究项目。
在移植了要点之后,问题是我们如何进行并行化。
在实验室中,我可以使用几台不同的 Opteron 机器,它们有 2 到 8 个内核,但没有 GPU(目前)。我们正在运行 64b gentoo。
GPGPU 版本将是(非常)理想的,但项目中只有一名程序员,维护单独的非 GPU 和 GPU 版本不是一种选择。
此外,该代码将是 GPL 的,我们希望看到它被其他可能拥有截然不同的硬件的人使用。
因此,整个程序必须易于编译/运行,无需 GPU 甚至多核系统。
OpenCl 似乎是一个不错的选择,因为它可以在没有 GPU 的机器上运行,但是这段代码将如何在单核或 32b 系统上执行呢?
是否有可能以无需 openCL 即可轻松编译的方式编写代码?
c++ - 使用 boost::threadpool 和 boost::bind 会使我的程序陷入无限循环
boost::threadpool
我正在尝试使用(不是boost
, link的官方部分)来并行化我的程序的某个方面。但是,我发现我的程序停顿了,经过检查,htop
显示有两个非活动线程(我怀疑在我的线程池中)和一个线程以 100% 运行(我怀疑我的主执行线程)。
以下是相关代码:
我怀疑问题出在我的boost::bind
构造上的原因是,当我创建一个void foobar() {}
函数并将其传递给boost::threadpool::pool::schedule
时,程序不会进入它的无限循环。我在这里做错了什么?
c++ - 第一人称采光
嗨 :) 我一直在寻找数周,但找不到解决方案。可以 sum1 请告诉我如何在使用第一人称相机时实现光线拾取。您应该在公式中的哪个位置包含相机的方向?如果有人对此有任何解决方案或工作编码,请发表评论
非常感谢
raytracing - 关于样品技术的问题
我正在研究光线追踪器。它在 tls.googlecode.com上
当我仔细观察时,我可以在第一张图像中发现很多噪点。我的问题是:这是抖动采样器的正常行为吗?
一些信息:第一张图像以 1024 个样本/像素(环境遮挡)渲染,抖动采样器。而且,当我以 256 个样本/像素渲染它时,差别不大。
源代码在 sampler.h/sampler.cc 中,很短。欢迎对此光线追踪器的其他部分发表任何评论。
谢谢!
arrays - 如何在 Haskell 中滚动快速 BVH 表示
我正在使用 Haskell Raytracer,目前使用 BVH 实现,它强调一个幼稚的二叉树来存储层次结构,
其中 Dimension 是X
, Y
or Z
(用于更快的遍历)并且 AABB 是我的轴对齐边界框类型。这工作得相当好,但我真的很想尽可能快地做到这一点。所以我的下一步(当使用 C/C++ 时)将使用这棵树来构建一个扁平化的表示,其中节点存储在一个数组中,“左”子节点立即跟随它的父节点和父节点的右子节点的索引与父母一起存储,所以我有这样的事情:
我还没有真正尝试过这个,但我担心性能仍然会低于标准,因为我不能将LinearNode
实例存储在 UArray 中,我也不能将Int
索引正确的孩子与Float
构成的值一起存储AABB 在单个 UArray 中(如果我弄错了,请纠正我)。并且使用两个数组意味着糟糕的缓存一致性。所以我基本上是在寻找一种有效存储我的树的方法,这样我就可以期待良好的遍历性能。应该是
- 袖珍的
- 具有良好的局部性
- 使用最新的 GHC 编译器
- 应该通过尽可能少的间接(尽管“thunk”不能帮助提高性能,所以“未装箱”类型会有所帮助)
raytracing - 是否可以在没有 CUDA/OpenCL 等的情况下使用 GPU 进行光线追踪?
我正在使用不支持 CUDA 或 OpenCL 等功能的 Windows Phone 7。我是 GPU 方面的新手,GPU 上有什么东西可以用来帮助加速光线追踪吗?像三角形相交测试?或者从纹理中选择正确的颜色?