【发布时间】:2015-06-14 20:12:27
【问题描述】:
在我正在编写的光线追踪器中,我刚刚尝试实现一个适当的透视查看系统,但是它似乎有问题,我似乎无法弄清楚发生了什么。
例如,在 (-150.0,0.0,0.0)、(0.0,0.0,0.0) 和 (-150.0,0.0,0.0) 具有三个球体、绿色、红色和蓝色的场景strong>(150.0,0.0,0.0) 和一个位于 (0.0,0.0,-600.0) 的相机,指向中心球我得到这个图像:
这似乎是对的。
如果我将相机移动到 (0.0, 600.0,-600.0),仍然指向中心球体,我希望得到类似的图像,因为我没有向左或向右移动。然而,这就是呈现的内容:
这对我来说没有任何意义。
这是我的透视投影类:
public class PerspectiveProjector extends Projector{
public Point3D camera;
public Point3D sceneLocation;
public double distance;
public Vector3D u, v, w;
public PerspectiveProjector(Point3D camera, Point3D sceneLocation, double FOV){
this.camera = new Point3D(camera);
this.sceneLocation = new Point3D(sceneLocation);
this.distance = RayTracer.world.viewPlane.height/2/Math.tan(Math.toRadians(FOV));
uvw();
}
private void uvw() {
w = camera.subtractVector(sceneLocation);
w.normalise();
//prob
u = new Vector3D(0.00424,1.0,0.00764).cross(w);
u.normalise();
v = w.cross(u);
v.normalise();
}
public Ray createRay(Point2D point) {
Ray ray = new Ray(new Point3D(camera), u.multiply(point.x).add(v.multiply(point.y).subtract(w.multiply(distance))));
ray.direction.normalise();
return ray;
}
}
如果您想查看更多我的代码,请告诉我。
【问题讨论】:
标签: java raytracing perspectivecamera