Java 光线跟踪-遍历树

Java 光线跟踪-遍历树,java,raytracing,Java,Raytracing,我写了一个光线追踪程序,除了我用来遍历光线树的算法之外,所有的东西都在运行,我不确定它是否正确。在每个碰撞点,程序都存储对象的颜色、反射率指数和该点的光强度(镜面反射和漫反射、环境光是常数)。有人能帮我解释一下,当我穿越光线树时,我应该如何准确地结合物体的颜色和光强度 我认为你应该使用一些局部照明模型。U具有计算此反射模型的所有值:来自: 表面颜色=发射+环境光+漫反射+镜面反射 这里, emissive=Ke 其中: Ke是材料的发射颜色 ambient=Ka x globalAmbie

我写了一个光线追踪程序,除了我用来遍历光线树的算法之外,所有的东西都在运行,我不确定它是否正确。在每个碰撞点,程序都存储对象的颜色、反射率指数和该点的光强度(镜面反射和漫反射、环境光是常数)。有人能帮我解释一下,当我穿越光线树时,我应该如何准确地结合物体的颜色和光强度

我认为你应该使用一些局部照明模型。U具有计算此反射模型的所有值:

来自:

表面颜色=发射+环境光+漫反射+镜面反射

这里,

  • emissive=Ke

    其中:

    • Ke是材料的发射颜色
  • ambient=Ka x globalAmbient

    其中:

    • Ka是材料的环境反射率和
    • globalAmbient是传入环境光的颜色
  • diffuse=Kd x lightColor x max(N·L,0)

    其中:

    • Kd是材质的漫反射颜色
    • lightColor是传入漫反射光的颜色
    • N是归一化曲面法线
    • L是朝向光源的归一化向量,并且
    • P是被着色的点
  • 镜面反射=Ks x浅色x面x(最大(N·H,0))^光泽度

    其中:

    • Ks是材质的镜面反射颜色
    • lightColor是入射镜面反射光的颜色
    • N是归一化曲面法线
    • V是朝向视点的标准化向量
    • L是朝向光源的归一化向量
    • H是介于V和L之间的归一化向量
    • P是被着色的点,并且
    • 如果N·L大于0,则端面为1,否则为0

最简单地说,对于多个对象,其中n是当前对象:

每个对象接收下一个对象发出的光

incoming_light[n] = outgoing_light[n+1]
每个对象的接收光都会通过其漫反射颜色和入射角(光线方向和法线的点积)进行过滤,如果传出光线已为余弦分布,则可以跳过此步骤:

最后,像素颜色就是你击中的第一个物体发出的光

final_color = outgoing_light[0]
final_color = outgoing_light[0]