protected LookAt cameraToLookAt(Globe globe, Camera camera, LookAt result) {
this.cameraToViewingMatrix(globe, camera, this.modelview);
this.modelview.extractEyePoint(this.forwardRay.origin);
this.modelview.extractForwardVector(this.forwardRay.direction);
if (!globe.intersect(this.forwardRay, this.originPoint)) {
double horizon = globe.horizonDistance(camera.altitude);
this.forwardRay.pointAt(horizon, this.originPoint);
}
globe.cartesianToGeographic(this.originPoint.x, this.originPoint.y, this.originPoint.z, this.originPos);
globe.cartesianToLocalTransform(this.originPoint.x, this.originPoint.y, this.originPoint.z, this.origin);
this.modelview.multiplyByMatrix(this.origin);
result.latitude = this.originPos.latitude;
result.longitude = this.originPos.longitude;
result.altitude = this.originPos.altitude;
result.range = -this.modelview.m[11];
result.heading = this.modelview.extractHeading(camera.roll);
result.tilt = this.modelview.extractTilt();
result.roll = camera.roll;
return result;
}