コード例 #1
0
        private SEAMesh AppendMesh(Scene scene, Node node, List <Mesh> meshes, SEAObject3D parent)
        {
            int sIndex = GetIndexByTag(node);

            if (sIndex != -1)
            {
                return((SEAMesh)Writer.Objects[sIndex]);
            }

            List <Animation> anmList = GetAnimation(scene, node.Name);

            SEAGeometry geo = AppendGeometry(scene, node, meshes);

            if (geo != null)
            {
                SEAMesh seaMesh = new SEAMesh(node.Name);

                /*if (meshes[0].HasMeshAnimationAttachments)
                 * {
                 * }*/

                Mesh mesh = meshes[0];

                if (Modifiers && geo.jointPerVertex > 0)
                {
                    seaMesh.modifiers.Add((uint)GetIndex(AppendSkeleton(scene, mesh)));
                    seaMesh.animations.Add((uint)GetIndex(AppendSkeletonAnimation(scene, mesh)));
                }

                if (mesh.MaterialIndex != -1)
                {
                    seaMesh.materials.Add(GetIndex(AppendMaterial(scene, scene.Materials[mesh.MaterialIndex])));
                }

                seaMesh.parent = parent != null?GetIndex(parent) : -1;

                objects.Add(seaMesh);
                Writer.AddObject(seaMesh);

                seaMesh.transform = To3x4Array(node.Transform);
                seaMesh.geometry  = GetIndex(geo);

                seaMesh.tag = node;

                return(seaMesh);
            }

            return(null);
        }
コード例 #2
0
        private SEAObject3D AppendLight(Scene scene, Node node, Light light, SEAObject3D parent)
        {
            int sIndex = GetIndexByTag(node);

            if (sIndex != -1)
            {
                return((SEAObject3D)Writer.Objects[sIndex]);
            }

            SEALight seaLight = null;

            if (light.LightType == LightSourceType.Point)
            {
                SEAPointLight pLight = new SEAPointLight(GetValidString(objects, node.Name));
                pLight.multiplier = 1;
                pLight.color      = ToInteger(light.ColorDiffuse);
                pLight.position   = ToPositionArray(node.Transform);

                seaLight = pLight;
            }
            else if (light.LightType == LightSourceType.Directional || light.LightType == LightSourceType.Spot)
            {
                SEADirectionalLight dLight = new SEADirectionalLight(GetValidString(objects, node.Name));
                dLight.multiplier = 1;
                dLight.color      = ToInteger(light.ColorDiffuse);

                dLight.transform = To3x4Array(node.Transform);

                seaLight = dLight;
            }

            if (seaLight != null)
            {
                seaLight.parent = parent != null?GetIndex(parent) : -1;

                seaLight.tag = node;

                objects.Add(seaLight);
                Writer.AddObject(seaLight);
            }

            return(seaLight);
        }
コード例 #3
0
        private SEAObject3D AppendObject3D(Scene scene, Node node, SEAObject3D parent)
        {
            SEAObject3D object3d = null;

            /*
             *  mtx.e00 / scale.x, mtx.e10 / scale.x, mtx.e20 / scale.x,
             *  mtx.e01 / scale.y, mtx.e11 / scale.y, mtx.e21 / scale.y,
             *  mtx.e02 / scale.z, mtx.e12 / scale.z, mtx.e22 / scale.z
             */

            //node.Transform = node.Transform * Matrix4x4.FromEulerAnglesXYZ(-90, 0, 0);

            if (node.MeshCount > 0)
            {
                object3d = AppendMesh(scene, node, scene.Meshes, parent);
            }
            else if (!MeshOnly && scene.RootNode != node)
            {
                object unrelatedObject = GetUnrelatedObjectByNode(node, scene);

                if (unrelatedObject is Light)
                {
                    object3d = AppendLight(scene, node, (Light)unrelatedObject, parent);
                }
                else if (unrelatedObject is Camera)
                {
                    object3d = AppendCamera(scene, node, (Camera)unrelatedObject, parent);
                }
                else if (EnabledDummy)
                {
                    object3d = AppendDummy(scene, node, parent);
                }
            }

            foreach (Node children in node.Children)
            {
                AppendObject3D(scene, children, object3d);
            }

            return(null);
        }
コード例 #4
0
        private SEAObject3D AppendDummy(Scene scene, Node node, SEAObject3D parent)
        {
            int sIndex = GetIndexByTag(node);

            if (sIndex != -1)
            {
                return((SEACamera)Writer.Objects[sIndex]);
            }

            SEADummy dummy = new SEADummy(GetValidString(objects, node.Name));

            dummy.transform = To3x4Array(node.Transform);
            dummy.width     = dummy.height = dummy.depth = 100;

            objects.Add(dummy);
            Writer.AddObject(dummy);

            dummy.tag = node;

            return(dummy);
        }
コード例 #5
0
        private SEACamera AppendCamera(Scene scene, Node node, Camera camera, SEAObject3D parent)
        {
            int sIndex = GetIndexByTag(node);

            if (sIndex != -1)
            {
                return((SEACamera)Writer.Objects[sIndex]);
            }

            SEACamera cam = new SEACamera(GetValidString(objects, node.Name));

            cam.parent = parent != null?GetIndex(parent) : -1;

            cam.transform = To3x4Array(node.Transform * camera.ViewMatrix);
            cam.fov       = camera.FieldOfview;

            objects.Add(cam);
            Writer.AddObject(cam);

            cam.tag = node;

            return(cam);
        }