Color sceneTraceRayAtPixel(const Scene *scene, const int currentPixel, const int width, const int height, const int numCameraRayBounces) { const float cameraFov = 40; const float cameraAspectRatio = 1; float maxX = tanf(cameraFov/360.0*PI); float x = ((((currentPixel % width) + randf()) / width ) * 2 - 1) * maxX; float y = -((((currentPixel / width) + randf()) / height) * 2 - 1) * maxX / cameraAspectRatio; return sceneTraceRay(scene, mrMul(mInversed(scene->cameraOrientation), makeRay(makeVectorOrigo(), vNormalized(makeVector(x, y, 1)))), numCameraRayBounces); }
SceneObject makeSceneObjectSphere (const Sphere sphere, const Matrix transform, const Material *material) { return (SceneObject) {&sceneObjectSphereVTable, material, transform, mInversed(transform), {.sphere = sphere}};
SceneObject makeSceneObjectPlane (const Plane plane, const Matrix transform, const Material *material) { return (SceneObject) {&sceneObjectPlaneVTable, material, transform, mInversed(transform), {.plane = plane}};