public static ColorChannel calcReflectChannel(Union b, Ray3 ray, int reflectTime) { InsertsectResult result = b.insertsect(ray); if (result.sphere != null) { float reflectiveness = result.sphere.material.reflectiveness; ColorChannel color = result.sphere.material.calcColor(ray, result.position, result.normal); color = color.mul(1 - reflectiveness); if (reflectiveness > 0 && reflectTime > 0) { Vector3 tmpDir = result.normal.mul(-2 * result.normal.dot(ray.getDirection)).add(ray.getDirection); Ray3 newRay = new Ray3(result.position, tmpDir); ColorChannel tmp = calcReflectChannel(b, newRay, reflectTime - 1); color = color.add(tmp.mul(reflectiveness)); } return(color); } else { return(Constant.black); } }
public ColorChannel mud(ColorChannel colorchannel) { return(new ColorChannel(r * colorchannel.r, g * colorchannel.g, b * colorchannel.b)); }
public ColorChannel add(ColorChannel colorchannel) { return(new ColorChannel(r + colorchannel.r, g + colorchannel.g, b + colorchannel.b)); }