小编Kot*_*oto的帖子

光线追踪折射?

我一直在研究我的光线跟踪器.我添加了反射和多线程支持.目前我正在努力增加折射,但它只有一半工作. 球

如您所见,有一个中心球体(没有镜面反射高光),一个反射球体(右侧)和一个折射球体(左侧).我很高兴反思,看起来非常好.对于折射它有点工作......光被折射并且球体的所有阴影都在球体中可见(折射率1.4),但是有一个外部黑色环.

编辑:当我增加球体的折射率时,显然黑色环变大,因此球体变小.相反,当降低折射率时,球体变大,黑色环变小......直到折射率设为1,环完全消失.IOR = 1.9 在此输入图像描述 IOR = 1.1 在此输入图像描述 IOR = 1.00001 在此输入图像描述 有趣的是,在IOR = 1时,球体失去透明度并变白. 在此输入图像描述

我认为我涵盖了全部内部反思,这不是问题所在.

现在的代码:我正在使用operator |for dot产品,因此(vec|vec)是一个点积和operator ~反转向量.物体,包括ligths和spheres都存储在Object **objects;.光线跟踪功能

Colour raytrace(const Ray &r, const int &depth)
{
    //first find the nearest intersection of a ray with an object
    Colour finalColour = skyBlue *(r.getDirection()|Vector(0,0,-1)) * SKY_FACTOR;
    double t, t_min = INFINITY;
    int index_nearObj = -1;
    for(int i = 0; i < objSize; i++)
    {
        if(!dynamic_cast<Light *>(objects[i]))//skip light src
        {
            t = objects[i]->findParam(r); …
Run Code Online (Sandbox Code Playgroud)

c++ 3d graphics raytracing

19
推荐指数
1
解决办法
6332
查看次数

光线追踪阴影

所以,我在网上阅读了关于光线跟踪的内容,并在业余时间开始从零开始编写一个Raytracer.我正在使用C++,我已经学习了大约一个月了.我已经阅读了网上光线跟踪理论,到目前为止它的工作非常好.它只是一个基本的光线跟踪器,既不使用模型也不使用纹理.

起初它制作了一台雷卡斯特,并对结果非常满意. 在此输入图像描述

那么我尝试了多个对象,它也有效.我刚刚在这个实现中使用了漫反射阴影,并将光的颜色添加到了没有着色的点处的对象颜色. 在此输入图像描述 不幸的是,此代码不适用于多个光源.然后我开始重写我的代码,以便它支持多个灯光.我也读过Phong照明并开始工作: 在此输入图像描述 它甚至适用于多个灯: 在此输入图像描述

到目前为止,我很高兴,但现在我有点卡住了.我已经尝试修复这个问题很长一段时间了,但我什么也没想到.当我添加第二个球体甚至是第三个球体时,只有最后一个球体被照亮.最后,我的意思是我的数组中存储所有对象的对象.请参阅下面的代码. 在此输入图像描述

显然,紫色球体应具有类似的照明,因为它们的中心位于同一平面内.令我惊讶的是,球体只有环境照明 - >阴影,但情况并非如此.

所以现在我的跟踪功能:

Colour raytrace(const Ray &r, const int &depth)
{
    //first find the nearest intersection of a ray with an object
    //go through all objects an find the one with the lowest parameter

    double t, t_min = INFINITY;
    int index_nearObj = -1;//-1 to know if obj found
    for(int i = 0; i < objSize; i++)
    {
        //skip light src
        if(!dynamic_cast<Light *>(objects[i]))
        {
            t = objects[i]->findParam(r);
            if(t > 0 && t < t_min) …
Run Code Online (Sandbox Code Playgroud)

c++ raytracing shadow phong

3
推荐指数
1
解决办法
7832
查看次数

标签 统计

c++ ×2

raytracing ×2

3d ×1

graphics ×1

phong ×1

shadow ×1