internal static void _AddCameraTo(CameraTransform3D?_Camera, GLTFWriteSettings?settings, SharpGLTF.Scenes.SceneBuilder scene) { if (!_Camera.HasValue) { return; } var vcam = _Camera.Value; var camNode = new SharpGLTF.Scenes.NodeBuilder("CameraNode"); camNode.WorldMatrix = vcam.WorldMatrix; var cam = vcam; cam.WorldMatrix = Matrix4x4.Identity; vcam = cam; if (vcam.TryGetPerspectiveFieldOfView(out var vfov)) { var persp = new SharpGLTF.Scenes.CameraBuilder.Perspective(null, vfov, 0.1f); scene.AddCamera(persp, camNode); } else if (vcam.TryGetOrthographicScale(out var oscale)) { var ortho = new SharpGLTF.Scenes.CameraBuilder.Orthographic(oscale, oscale, 0.1f, 1000); scene.AddCamera(ortho, camNode); } if ((settings?.CameraSize ?? 0) > 0) { var camMesh = new GltfMeshScene3D(); vcam.DrawCameraTo(camMesh, settings.Value.CameraSize.Value); vcam.DrawFustrumTo(camMesh, settings.Value.CameraSize.Value * 0.05f, System.Drawing.Color.Yellow); scene.AddRigidMesh(camMesh.Mesh, camNode); } if (Matrix4x4.Invert(_Camera.Value.AxisMatrix, out var invMatrix)) { // scene.ApplyBasisTransform(invMatrix); } }