【发布时间】:2017-03-30 03:35:06
【问题描述】:
我在光线追踪反射方面遇到了一些问题。
这是我的模拟代码:
public Color calculateIlluminationModel(Vector normal, boolean isInShadow, Scene scene, Ray ray, Vector intersectionPoint)
{
if (isInShadow)
{
return getColorInShadow(scene);
}
else
{
Vector originalDirection = ray.getDirection();
Vector reflectionVector = originalDirection
.subtract(normal
.multiply(2)
.multiply(originalDirection.dotProduct(normal)
)
)
.normalize();
Ray reflectionRay = Ray.translateRayByEpsilon(new Ray(intersectionPoint, reflectionVector));
return scene.getRayColor(reflectionRay);
}
}
但是球体似乎从来没有正确地反射任何东西。我计算反射光线的方式有问题吗?
注意:scene.getRayColor(reflectionRay); 是光线追踪组件,用于确定光线击中的颜色。我相信这不是问题,但如果您认为有必要展示该作品,请告诉我。
【问题讨论】:
-
你确定 normal 和 originalDirection 是单位长度吗?
-
@JasonC 是的。它们都是标准化的。
-
你确定法线从物体向外指向而不是向内吗?
-
如果你捏造 isInShadow 总是假的,你会看到什么?
-
@JasonC 哦。呃。是的,这解决了问题。它在此图像中会反映的唯一位置将是阴影。谢谢。如果你愿意,你可以把它放在一个答案中,我会接受的。
标签: java raytracing lighting