问题标签 [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 - 通过旋转 2D 轮廓创建和渲染 3D 模型的最简单方法
我有一个黑白 2D 轮廓图(例如,一个棋子),我想围绕一个轴旋转以创建一个 3D 对象。
然后我想使用某种光线跟踪软件从多个角度渲染该 3D 对象,将每个角度保存到一个单独的文件中。
自动(重复)的最简单方法是什么 1. 从 2d 绘图中获取矢量路径 2. 通过旋转创建 3D 模型 3. 将其导入光线跟踪器。
- 我还没有选择特定的光线追踪器,但Sunflow已经引起了我的注意。
- 纹理/凹凸映射会很好但不是必需的
c++ - Unittest++:测试多个可能的值
我目前正在用 C++ 实现一个简单的光线追踪器。我有一个名为 OrthonormalBasis 的类,它从一个或两个指定的向量生成三个正交单位向量,例如:
我正在使用 Unittest++ 框架测试我的所有方法。问题是,对于有效的正交基,存在不止一种可能的解决方案。例如这个测试:
有时它成功,有时它失败,因为向量 v 和 w 也可能有一个负 1,并且仍然代表一个有效的正交基。有没有办法指定多个预期值?或者你知道另一种方法吗?
重要的是,我将实际值和预期值打印到标准输出,以便调试方法,因此该解决方案无法完成工作:
floating-point - POVray:如何可靠地创建仅接触表面的对象的漂亮合并?
我在做什么
我有一个场景,它通过算法绘制一个prism
具有六边形横截面的 a 和围绕中心一个的 n 层这样的棱镜,这样所有的棱镜一起形成一个更大的六边形形状。
现在,每一排棱镜与下一排棱镜的位移是 sqrt(3)/2 的倍数(因为一个棱镜的尺寸是 <1,sqrt(3)>,因为 sin(120/2°) = sqrt(3 )/2)。
我想,与棱镜尺寸相关的结果位置的浮点值并不总是以在物体之间产生零间隙的方式完全一致。因此,当我将整个东西包裹在 a 中merge
并为其分配透明的玻璃材料时,我不会得到平滑、统一的形状。根据 n 的值,我会在合并对象内部的边缘或某些表面的阴影处或两者兼而有之处得到抖动的怪异。
这是我的代码开头的注释块中的一个片段,它解释了 ASCII 艺术中的场景:
整个代码太长,无法在此处粘贴,但可在此处找到。读起来可能也很痛苦,因为我是个糟糕的编码员,而且 POVray 没有#for
循环。
我的问题
- 在合并仅接触表面但不重叠的数学定位对象时,如何考虑浮点值的不可预测性和不精确性?
- 这甚至应该按照我在 POVray 中想要的方式工作吗?
- 我在这里做一些非常愚蠢的事情吗?
raytracing - 光线追踪/Phong
我不知道光线追踪和 Phong 或 Gouraud 等着色技术之间的区别。
对于 3D 建模,是否必须在这些算法之间进行选择,或者它们可以在同一个算法中实现。
谢谢你。
vector - 关于向量、顶点、边、射线、线和线段实现的非常普遍的问题
这只是一个关于光线(和/或线段或边缘等)及其在软件渲染的 3d 引擎中的位置的大问题,该引擎正在/不执行光线跟踪操作。我正在学习基础知识,我是第一个承认我对这些东西不太了解的人,所以请善待。:)
我想知道为什么不使用参数化线而不是射线(或者它们是??)。我查看了互联网上的一些 cpp 文件,发现有几个资源定义了一个 Ray.cpp 对象,一个带有顶点和一个向量,另一个使用了一个点和一个向量。我很确定您可以定义一条只有法线或向量的无限线,然后沿着该线定义相交点以创建一条线段作为该无限线的子集。当前是否有任何引擎以这种方式实现线路,或者是否有更好的方法来解决这个问题?
为了增加进一步的复杂性(或简单性?)维基百科说,在向量空间中,线段的端点通常是向量,特别是 u -> u + v,如果在空间中用向量而不是用向量定义线,这很有意义与已经定义的无限线相交,但我也找不到任何实现,这让我怀疑在 3d 引擎中应用它时我的想法的有效性,甚至在查看 Flash 3D 引擎 Papervision 时会产生更复杂的情况,我查看了 Ray 类,它采用 6 个单独的数值作为参数,然后将它们作为 2 个不同的 Number3D(Papervision 等效于 Vector)、数据类型返回?!?
我很想看到一个实际使用正确方法来实现这些低级部分的实现,这些低级部分按照它们的真实定义。
opengl - 光线投射:如何正确应用投影矩阵?
我目前正在 GLSL 中进行一些光线投射,效果很好。无论如何,我现在想从正交投影到透视投影,但我不知道如何正确地这样做。有没有关于如何使用带有光线投射的投影矩阵的好的链接?我什至不确定我必须将矩阵应用于什么(可能以某种方式应用于光线方向?)。现在我这样做(伪代码):
但现在我想使用一个类似于 gluPerspective 函数的 projMatrix,这样我就可以简单地定义纵横比、fov 以及近平面和远平面。所以基本上,任何人都可以为我提供一大块代码来设置类似于 do 的 proj 矩阵gluProjection
吗?其次告诉我将它与 rayDirection 相乘是否正确?
c++ - 什么会导致 Phong 镜面反射着色产生色域溢出?
我目前正在用 C++ 实现一个基本的光线追踪器。到目前为止效果很好,哑光材质(带有环境和漫反射 brdf)到目前为止工作正常。
添加镜面高光会产生完整的Phong 模型,而这正是我试图做的。
不幸的是,我遇到了色域溢出,镜面反射常数 ks 和指数的各种值。这里有些例子。
图片:http://dl.dropbox.com/u/614366/cornell_1.png
图片:http://dl.dropbox.com/u/614366/cornell_2.png
图片:http://dl.dropbox.com/u/614366/cornell_3.png
以下是代码的一些相关摘录:
在 raycast.cpp 中
在 phong.cpp 中
在高光.cpp
在sphere.cpp中
你有什么想法可能导致错误吗?导致这种结果的可能因素是什么?
在此先感谢,帕特里克。
3d - 给定一个八叉树体素,如何用光滑的表面进行渲染?
我注意到大多数 3d 体素模型的分辨率实际上都非常低,但随后通过某种插值进行了平滑渲染。
考虑到它的光线追踪,平滑渲染它的算法是什么?有人可以推荐一本关于这个主题的书吗?
math - 检测和查找相交射线与三次贝塞尔三角形
在编写模型编辑器时,除了启用光线追踪之外,我还可以考虑一些操作,我希望找到关于光线和三角形贝塞尔面片之间交点的非常好的近似值。
这该怎么做?我知道几种方法,但可能有更好的方法。
确切的用例:我可能想使用一个贝塞尔三角形补丁作为参考表面,用鼠标绘制详细的形状。我可能也想从这样的补丁中找出一个分裂点。
如果有它的 C 源代码,我可能也想看看。也许甚至使用它而不是滚动我自己的代码。
graphics - 光线生成不一致
我已经编写了从相机的“眼睛”到距相机眼睛一定距离的观察平面生成光线的代码:
ul
是视平面lr
的左上角, 是视平面的左下角。它们定义如下:
这里,org
是观察平面的中心,是radius
观察平面和相机眼睛之间的距离, 是从观察平面中心在 xdx
和dy
y 方向上的位移。
该ConstructRayThroughPixel(...)
函数非常适合眼睛位于 (0,0,0) 的相机。然而,当相机位于某个不同的位置时,并非为图像产生所有需要的光线。
有什么建议可能会出错吗?也许我的方程式有问题?
谢谢您的帮助。