Inheritance: SEAObject
Example #1
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;
        }
Example #2
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;
        }
Example #3
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;
        }
Example #4
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;
        }
Example #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;
        }