package org.sunflow.core.camera; import org.sunflow.SunflowAPI; import org.sunflow.core.CameraLens; import org.sunflow.core.ParameterList; import org.sunflow.core.Ray; public class FisheyeLens implements CameraLens { @Override public boolean update(ParameterList pl, SunflowAPI api) { return true; } @Override public Ray getRay(float x, float y, int imageWidth, int imageHeight, double lensX, double lensY, double time) { float cx = 2.0f * x / imageWidth - 1.0f; float cy = 2.0f * y / imageHeight - 1.0f; float r2 = cx * cx + cy * cy; if (r2 > 1) { return null; // outside the fisheye } return new Ray(0, 0, 0, cx, cy, (float) -Math.sqrt(1 - r2)); } }