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; }
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; }
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; }
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; }
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; }