Re: Mapping Floor Plan Coordinates to Render/3DView Coordiantes
Code: Select all
int renderWidth = 1024;
int renderHeight = 576;
/* Set up */
Camera camera = getHome().getCamera();
cameraPosition = new Vector4d(camera.getX(), camera.getZ(), camera.getY(), 0);
Transform3D yawRotation = new Transform3D();
yawRotation.rotY(camera.getYaw());
Transform3D pitchRotation = new Transform3D();
pitchRotation.rotX(-camera.getPitch());
Transform3D perspectiveTransform = new Transform3D();
perspectiveTransform.perspective(camera.getFieldOfView(), (double)renderWidth / renderHeight, 0.1, 100);
perspectiveTransform.mul(pitchRotation);
perspectiveTransform.mul(yawRotation);
HomePieceOfFurniture furniture = /* Get some furniture... */;
Vector4d objectPosition = new Vector4d(furniture.getX(), furniture.getElevation(), furniture.getY(), 0);
objectPosition.sub(cameraPosition);
perspectiveTransform.transform(objectPosition);
objectPosition.scale(1 / objectPosition.w);
System.out.println(String.format("Projected pixel: (%d, %d)",
(int)((objectPosition.x * 0.5 + 0.5) * renderWidth),
(int)((objectPosition.y * 0.5 + 0.5) * renderHeight)
));