public LEDTerrainModule(ModuleConfiguration moduleConfiguration) : base(moduleConfiguration, 2.5f) { perlin = new Perlin(-1); matProj = Mat4x4.MakeProjection(45.0f, 1.5f, 0.1f, 1000.0f); // Set up "World Tranmsform" though not updating theta // makes this a bit redundant Mat4x4 matRotZ, matRotX; matRotZ = Mat4x4.MakeRotationZ(0f); matRotX = Mat4x4.MakeRotationX(1.1f); Mat4x4 matTrans = Mat4x4.MakeTranslation(0.0f, 0.0f, 5.0f); matWorld = Mat4x4.MakeIdentity(); // Form World Matrix matWorld = matRotZ * matRotX; // Transform by rotation matWorld = matWorld * matTrans; // Transform by translation // Create "Point At" Matrix for camera Vector3D vUp = new Vector3D(0, 2, 0); Vector3D vTarget = new Vector3D(0, 0, 1); Mat4x4 matCameraRot = Mat4x4.MakeRotationY(fYaw); vLookDir = matCameraRot * vTarget; vTarget = vCamera + vLookDir; Mat4x4 matCamera = Mat4x4.PointAt(vCamera, vTarget, vUp); // Make view matrix from camera matView = matCamera.QuickInverse(); }
protected override Image <Rgba32> Run() { fElapsedTime = stopwatch.ElapsedMilliseconds / 1000f; stopwatch.Restart(); image = new Image <Rgba32>(renderWidth, renderHeight); engine3D.Canvas = image; // Set up "World Tranmsform" though not updating theta // makes this a bit redundant Mat4x4 matRotZ, matRotX; fTheta += 1.0f * fElapsedTime; // Uncomment to spin me right round baby right round matRotZ = Mat4x4.MakeRotationZ(fTheta * 0.5f); matRotX = Mat4x4.MakeRotationX(fTheta); Mat4x4 matTrans = Mat4x4.MakeTranslation(0.0f, 0.0f, 5.0f); Mat4x4 matWorld = Mat4x4.MakeIdentity(); // Form World Matrix matWorld = matRotZ * matRotX; // Transform by rotation matWorld = matWorld * matTrans; // Transform by translation // Create "Point At" Matrix for camera Vector3D vUp = new Vector3D(0, 1, 0); Vector3D vTarget = new Vector3D(0, 0, 1); Mat4x4 matCameraRot = Mat4x4.MakeRotationY(fYaw); vLookDir = matCameraRot * vTarget; vTarget = vCamera + vLookDir; Mat4x4 matCamera = Mat4x4.PointAt(vCamera, vTarget, vUp); // Make view matrix from camera Mat4x4 matView = matCamera.QuickInverse(); // Store triagles for rastering later // Store triagles for rastering later drawTriangles(meshCube, matWorld, matView, matProj, vCamera, light_direction, false); image.Mutate(c => c.Resize(LEDWidth, LEDHeight)); return(image); }