python 光线追踪器里的视觉缺陷?

wz3gfoph  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(127)

我不知道这是一个错误或正常的行为,但我感到困惑的是,一个细长的物体在反射一个红色的球体,这是什么?
我的场景:

s = Scene(
    [
        Light(
            type_=LightType.ambient, 
            intensity=vec3(0.2, 0.2, 0.2)
        ),
        Light(
            type_=LightType.point, 
            intensity=vec3(0.6, 0.6, 0.6), 
            position=vec3(2, 1, 0)
        ),
        Light(
            type_=LightType.directional,
            intensity=vec3(0.2, 0.2, 0.2), 
            direction=-vec3(1, 4, 4)
        ),
    ],
    [
        Triangle(vec3(-1.5, 0.5, 5.2), vec3(1.5, 0.5, 5.2), vec3(-1.5, 2, 4), vec3(0, 0, 0), 500, 1),
        Triangle(vec3(1.5, 0.5, 5.2), vec3(1.5, 2, 4), vec3(-1.5, 2, 4), vec3(0, 0, 0), 500, 1),
        Sphere(
            color=u8vec3(255, 0, 0), 
            radius=1, 
            center=vec3(0, -1, 3),
            specular=500,
            reflective = 0.2
        ),
        Sphere(
            color=u8vec3(0, 0, 255), 
            radius=1, 
            center=vec3(2, 0, 4),
            specular=500,
            reflective=0.3
        ),
        Sphere(
            color=u8vec3(0, 255, 0), 
            radius=1, 
            center=vec3(-2, 0, 4),
            specular=10,
            reflective=0.4 
        ),
        Sphere(
            color=u8vec3(255, 255, 0), 
            radius=5000, 
            center=vec3(0, -5001, 0),
            specular=1000,
            reflective=0.5
        )
    ]
)

完整代码如下:https://github.com/linux-admin0001/raytracer

ryoqjall

ryoqjall1#

Fixed version
我已经修好了。
我的错误是光线与物体相交时没有考虑光线的方向,假设光线指向前方(0,0,1),但它也与后方的物体相交,我针对三角形纠正了这一点,针对球体,我没有观察到这一点

if dot(D-O, object_.normal) > 0: continue

正如你所看到的,在最后的图像中,我去掉了许多对我来说有用的扭曲

相关问题