Ich habe Probleme mit Raytracing Reflexionen. HierKorrekte Raytracing reflektierende Oberflächen
ist das, was ich erwarte, um zu sehen:
Aber das ist, was ich wirklich bin zu sehen:
Nun, mein grundlegendes Verständnis davon, wie die neue Richtung der zu erhalten Reflexionsstrahl ist wie folgt:
Hier ist mein Code, dass emuliert:
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);
}
}
Aber die Kugel scheint nie richtig zu reflektieren. Ist etwas falsch mit der Art, wie ich die Reflexionsstrahlen berechne?
Hinweis:scene.getRayColor(reflectionRay);
ist die Ray-Tracing-Komponente, um die Farbe zu bestimmen, auf die der Strahl trifft. Ich glaube, es ist nicht das Problem, aber wenn Sie denken, dass es notwendig ist, dieses Stück zu zeigen, lassen Sie es mich wissen.
Sind Sie sicher, dass normale und ursprüngliche Richtung Einheitslänge sind? –
@JasonC Ja. Sie sind beide normalisiert. –
Sind Sie sicher, dass die Normalen vom Objekt nach außen und nicht nach innen zeigen? –