jjzjj

raytracing

全部标签

javascript - 如何在复杂场景中快速发现某个点是否被遮挡?

我有一个复杂的3D场景,我需要根据3D坐标在其上显示HTML元素。(我只是在顶部覆盖一个div标签并用CSS定位它。)但是,当3D坐标被模型遮挡时,我还需要部分隐藏它(例如,使其透明)(或换句话说,当它在相机中不可见时)。这些模型可能有数十万张面孔,我需要一种方法来查明它是否被遮挡,速度足以每秒运行多次。目前我使用的是Three.js内置的raytracer,代码如下://pos=vectorwith(normalized)x,ycoordinatesoncanvas//dir=vectorfromcameratotargetpointconstraycaster=newTHREE.R

Java 光线追踪 float 与 double

上学期我们不得不为学校的一门类(class)开发光线追踪器。学校快结束了,我试着摆弄一下。我想看看如果我将所有浮点计算从double更改为float(所有计算均使用double完成)会发生什么变化。所以我将每个变量都更改为float类型,并将Math方法返回的每个double简单地转换为float。在几个场景上测试我的光线追踪器显示出相当不错的性能提升。在网络上搜索后,我发现了float可以更快的各种原因,但也有人说double可以同样快,甚至在64位环境中更快。问题是,我在64位环境和JVM中运行。性能提高的原因是什么?现在,我正在阅读PBRT书籍,并计划在此之后从头开始重写光线追踪

java - 相机俯仰/偏航到方向 vector

我想做的是从我的相机转换光线。我知道相机的x、y和z坐标,以及它的俯仰和偏航。我需要计算它的方向vector,以便将它传递给我的光线追踪算法。相机的向上vector是(0,1,0)。“俯仰”,从摄像机的角度看,就是上下看。(我宁愿不使用矩阵,但如果必须的话我会使用) 最佳答案 假设您的坐标系设置满足以下条件:(pitch,yaw)->(x,y,z)(0,0)->(1,0,0)(pi/2,0)->(0,1,0)(0,-pi/2)->(0,0,1)这将计算(x,y,z):xzLen=cos(pitch)x=xzLen*cos(yaw)y

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

我在合并转换时遇到问题。不管出于什么原因,一切都没有像我想的那样进行,但老实说——所有的来回变换让我很头晕。正如我到处阅读的那样(虽然明确的解释很少见,恕我直言),转换的主要算法如下:用变换矩阵的逆变换射线(原点和方向)用变换矩阵变换得到的交点将物体在交点处的法线转换为逆的转置据我了解,这应该可以解决问题。我很确定我的问题出在我尝试计算光照时,因为初始交叉点和光照算法都使用相同的函数(obj.getIntersection())。但话又说回来,我不知道。:(您可以在这里阅读我的部分代码:main.cpp,scene.cpp,sphere.cpp,sdf-loader.cpp如果您需要更

c++ - 光线追踪不正确的软阴影采样

你好,我正在研究光线追踪算法,但我被蒙特卡洛算法困住了。在没有区域光的情况下渲染时,我的渲染输出是正确的,但是当我将区域光实现添加到源代码以生成软阴影时,我遇到了问题。这是前后输出图像。当我向下移动蓝色球体时,问题仍在继续(请注意,当球体沿白色虚线移动时,伪影仍在继续)。请注意,此球体和区域光具有相同的z偏移量。当我将蓝色球体带到屏幕前时,工件消失了。我认为问题是由均匀采样锥或采样球函数引起的但不确定。这里是函数:templateCVector3UConeSample(Tu1,Tu2,Tcosthetamax,constCVector3&x,constCVector3&y,constC

c++ - 奇怪的光线追踪伪影

我正在尝试使用Qt创建光线追踪器,但我遇到了一些非常奇怪的伪影。在我实现着色之前,我的场景中只有4个球体、3个三角形和2个有界平面。它们都按预期和预期的颜色显示,但是,对于我的飞机,我会看到与背景颜色相同的点。这些点在我的视角位置会保持静止,所以如果我移动相机,这些点也会移动。然而,它们只影响平面和三角形,永远不会出现在球体上。一个我实现的阴影问题变得更糟。这些点现在也出现在光源中的球体上,因此任何部分都会受到漫反射的影响。另外,我的一个纯蓝色平面(RGB0,0,255)直接变黑了。因为我有两架飞机,所以我调换了它们的颜色,蓝色的又变黑了,所以这是颜色问题,而不是飞机问题。如果有人对问

c++ - 如果没有递归光线跟踪,反射和折射是不可能的吗?

我正在使用GLSL计算着色器编写基于GPU的实时光线跟踪渲染器。到目前为止,它确实工作得很好,但是当涉及同时具有反射和折射时,我偶然发现了一个看似无法解决的问题。我的逻辑告诉我,为了在一个物体(如玻璃)上产生反射和折射,射线必须分成两束,一束射线从表面反射,另一束射线穿过该表面。这些光线的最终颜色然后将基于某些功能进行组合,并最终用作光线所源自的像素的颜色。我的问题是我无法在着色器代码中拆分光线,因为我必须使用递归来做到这一点。根据我的理解,着色器中的函数不能递归,因为由于与旧GPU硬件的兼容性问题,所有GLSL函数都类似于C++中的内联函数。是否可以在着色器代码中模拟或伪造递归,或者

c++ - 软阴影 : Spherical Area Light Source

我正在尝试在我的光线追踪器中实现柔和阴影。为此,我计划从交点向区域光源发射多条阴影光线。我的目标是使用球形区域光——这意味着我需要在球体上为光线的方向vector生成随机点(回想一下,光线是用原点和方向指定的)。我四处寻找在球体上生成均匀分布的随机点的方法,但它们似乎比我正在寻找的要复杂一些。有谁知道在球体上生成这些点的任何方法?我相信我的球体区域光源将简单地由其XYZ世界坐标、RGB颜色值和r半径定义。谢谢,感谢您的帮助! 最佳答案 GraphicsGemsIII,第126页:voidrandom_unit_vector(doub

c++ - 禁止 GLSL 中的递归?

我在尝试编写以下递归调用时遇到了这个错误。我看过很多GLSL递归光线追踪实现的演示,所以我假设GLSL支持递归。不是这样吗?OpenGL正在返回一条编译时错误消息:Error:Functiontrace(vec3,vec3,vec3,int)hasstaticrecursion这是我的函数定义:vec3trace(vec3origin,vec3direction,vec3illum,intorder){floatdist;ints_index=getSphereIntersect(origin,direction,dist);//iflighthitfloatlight_dist=20

c++ - 计算机图形行业的人们使用什么进行光线追踪?

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion去年我参加了计算机图形学类(class)(研究生水平)。我们花了整个学期构建光线追踪器并向其添加功能。我们用C++从头开始构建,大概是为了更好地理解底层数据结构和算法。这是我的问题:如果我要在计算机图形行业找到一份工作,如果我开始从头开始构建一切像这样的光线追踪,人们会认为我疯了吗?是否有类似于OpenGL的支持光线追踪的图形库和框架?OpenGL本身是否支持光线追踪?我的类(class)教授