예제 #1
0
        public MainWindow()
        {
            InitializeComponent();
            var model = new SGLPlayerModel(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "X8PC00A.BIN"));
            var body  = Draw(model.Meshes.BodyXPData, model);

            group.Children.Add(body);

            var weapon = Draw(model.Meshes.WeaponXPData, model);

            group.Children.Add(weapon);
        }
예제 #2
0
        public Model3DGroup Draw(List <XPData> xpdata, SGLPlayerModel model)
        {
            var whole = new Model3DGroup();

            //Order for Synbios Idle
            var transformTest = new List <int> {
                0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x15, 0x10, 0x11, 0x12, 0x13, 0x14, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF
            };

            foreach (var b in xpdata)
            {
                var verticies = b.Verticies.Select(v => v.ToPoint3D()).ToArray();
                var part      = new Model3DGroup();

                foreach (var f in b.Faces)
                {
                    var mesh = new MeshGeometry3D();
                    mesh.Positions.Add(verticies[f.Vertex0]);
                    mesh.Positions.Add(verticies[f.Vertex1]);
                    mesh.Positions.Add(verticies[f.Vertex2]);
                    mesh.Positions.Add(verticies[f.Vertex3]);
                    mesh.TriangleIndices.Add(0);
                    mesh.TriangleIndices.Add(1);
                    mesh.TriangleIndices.Add(2);
                    mesh.TriangleIndices.Add(2);
                    mesh.TriangleIndices.Add(3);
                    mesh.TriangleIndices.Add(0);
                    var attr = f.Attribute;
                    if (attr.ZOrder > 0)
                    {
                        ;                 //TODO: Do something with ZOrder
                    }
                    Brush brush = new SolidColorBrush(Global.ToColor(attr.ColorNumber));

                    if (attr.IsTexture)
                    {
                        if (attr.IsVerticalFlip && attr.IsHorizontalFlip)
                        {
                            mesh.TextureCoordinates.Add(new WinPoint(1, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 0));
                        }
                        else if (attr.IsVerticalFlip)
                        {
                            mesh.TextureCoordinates.Add(new WinPoint(0, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 0));
                        }
                        else if (attr.IsHorizontalFlip)
                        {
                            mesh.TextureCoordinates.Add(new WinPoint(1, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 1));
                        }
                        else
                        {
                            mesh.TextureCoordinates.Add(new WinPoint(0, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 0));
                            mesh.TextureCoordinates.Add(new WinPoint(1, 1));
                            mesh.TextureCoordinates.Add(new WinPoint(0, 1));
                        }
                        var def = model.TextureDefinitions.Definitions[attr.TextureNum];
                        brush = new ImageBrush()
                        {
                            ImageSource = BitmapToImageSource(def.ToBitmap())
                        };
                    }
                    mesh.Normals.Add(f.Normal.ToVector3D());
                    var mGeometry = new GeometryModel3D(mesh, new DiffuseMaterial(brush));
                    mGeometry.BackMaterial = new DiffuseMaterial(brush);

                    part.Children.Add(mGeometry);
                }

                var events = model.Animations.AnimationEvents;


                //  var matrix = model.Animations.6(transformTest[xpdata.IndexOf(b) ], 1);
                //transform.Children.Add(Transform3D.Identity);

                // var t = matrix.ToTranslateTransform3D();
                //var transform = new Transform3DGroup();
                //transform.Children.Add(matrix.ToScaleTransform3D());
                //transform.Children.Add(matrix.ToRotateTransform3D());
                //transform.Children.Add(matrix.ToTranslateTransform3D());

                //part.Transform = transform;

                whole.Children.Add(part);
            }
            return(whole);
        }