コード例 #1
0
        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);
            }
        }