コード例 #1
0
ファイル: SkyChase.cs プロジェクト: Shadowth117/sa_tools
        public override void Render(Device dev, EditorCamera cam)
        {
            List <RenderInfo> result    = new List <RenderInfo>();
            MatrixStack       transform = new MatrixStack();

            Texture[] texs = ObjectHelper.GetTextures(texname);
            // Sky
            transform.Push();
            transform.NJTranslate(0.0f, -4000.0f, 0.0f);
            transform.NJScale(Skybox_Scale);
            result.AddRange(skytop.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skytopmesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Bottom cloud 1
            transform.Push();
            transform.NJTranslate(0.0f, -4000.0f, 0.0f);
            transform.NJScale(24.0f, 1.0f, 26.0f);
            result.AddRange(skybottom.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skybottommesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Bottom cloud 2
            transform.Push();
            transform.NJTranslate(0.0f, -2000.0f, 0.0f);
            transform.NJScale(24.0f, 1.0f, 26.0f);
            result.AddRange(skybottom.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skybottommesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Egg Carrier
            transform.Push();
            carriermdl.ProcessTransforms(transform);
            carriermdl.ProcessVertexData();
            dev.SetRenderState(RenderState.ZWriteEnable, true);
            result.AddRange(carriermdl.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("SHOOTING0"), carriermesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting, boundsByMesh: true));
            transform.Pop();
            RenderInfo.Draw(result, dev, cam, true);
        }
コード例 #2
0
 private bool DrawSelectedObject(NJS_OBJECT obj, MatrixStack transform, ref int modelindex, ref int animindex)
 {
     transform.Push();
     modelindex++;
     if (obj.Animate)
     {
         animindex++;
     }
     if (animation != null && animation.Models.ContainsKey(animindex))
     {
         obj.ProcessTransforms(animation.Models[animindex], animframe, transform);
     }
     else
     {
         obj.ProcessTransforms(transform);
     }
     if (obj == selectedObject)
     {
         if (obj.Attach != null)
         {
             for (int j = 0; j < obj.Attach.MeshInfo.Length; j++)
             {
                 Color col = obj.Attach.MeshInfo[j].Material == null ? Color.White : obj.Attach.MeshInfo[j].Material.DiffuseColor;
                 col = Color.FromArgb(255 - col.R, 255 - col.G, 255 - col.B);
                 NJS_MATERIAL mat = new NJS_MATERIAL
                 {
                     DiffuseColor   = col,
                     IgnoreLighting = true,
                     UseAlpha       = false
                 };
                 new RenderInfo(meshes[modelindex], j, transform.Top, mat, null, FillMode.WireFrame, obj.Attach.CalculateBounds(j, transform.Top)).Draw(d3ddevice);
             }
         }
         transform.Pop();
         return(true);
     }
     foreach (NJS_OBJECT child in obj.Children)
     {
         if (DrawSelectedObject(child, transform, ref modelindex, ref animindex))
         {
             transform.Pop();
             return(true);
         }
     }
     transform.Pop();
     return(false);
 }
コード例 #3
0
ファイル: SkyChase.cs プロジェクト: End-User-Person/sa_tools
        public override void Render(Device dev, EditorCamera cam)
        {
            List <RenderInfo> result    = new List <RenderInfo>();
            MatrixStack       transform = new MatrixStack();

            transform.Push();
            Texture[] texs = ObjectHelper.GetTextures("SHOOTING0");
            carriermdl.ProcessTransforms(transform);
            carriermdl.ProcessVertexData();
            dev.SetRenderState(RenderState.ZWriteEnable, true);             // Z write is disabled for skybox by default
            result.AddRange(carriermdl.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, carriermesh, boundsByMesh: true));
            transform.Pop();
            RenderInfo.Draw(result, dev, cam, true);
        }
コード例 #4
0
 public static BoundingSphere GetModelBounds(NJS_OBJECT model, MatrixStack transform, float scale, BoundingSphere bounds)
 {
     transform.Push();
     model.ProcessTransforms(transform);
     scale *= Math.Max(Math.Max(model.Scale.X, model.Scale.Y), model.Scale.Z);
     if (model.Attach != null)
     {
         bounds = Direct3D.Extensions.Merge(bounds, new BoundingSphere(Vector3.TransformCoordinate(model.Attach.Bounds.Center.ToVector3(), transform.Top).ToVertex(), model.Attach.Bounds.Radius * scale));
     }
     foreach (NJS_OBJECT child in model.Children)
     {
         bounds = GetModelBounds(child, transform, scale, bounds);
     }
     transform.Pop();
     return(bounds);
 }
コード例 #5
0
ファイル: Program.cs プロジェクト: MainMemory/SA2EmeraldCoast
 private static void ProcessModel(NJS_OBJECT obj, MatrixStack transform, BasicAttach dest)
 {
     transform.Push();
     obj.ProcessTransforms(transform);
     if (obj.Attach != null)
     {
         BasicAttach src     = (BasicAttach)obj.Attach;
         ushort      vertind = (ushort)dest.Vertex.Length;
         ushort      matind  = (ushort)dest.Material.Count;
         dest.ResizeVertexes(vertind + src.Vertex.Length);
         for (int i = 0; i < src.Vertex.Length; i++)
         {
             dest.Vertex[i + vertind] = Vector3.TransformCoordinate(src.Vertex[i].ToVector3(), transform.Top).ToVertex();
             dest.Normal[i + vertind] = Vector3.TransformNormal(src.Normal[i].ToVector3(), transform.Top).ToVertex();
         }
         foreach (NJS_MATERIAL mat in src.Material)
         {
             mat.TextureID = texmap[mat.TextureID];
             dest.Material.Add(mat);
         }
         foreach (NJS_MESHSET mesh in src.Mesh)
         {
             mesh.MaterialID += matind;
             mesh.PolyName    = "poly_" + SonicRetro.SAModel.Extensions.GenerateIdentifier();
             foreach (Poly poly in mesh.Poly)
             {
                 for (int i = 0; i < poly.Indexes.Length; i++)
                 {
                     poly.Indexes[i] += vertind;
                 }
             }
             dest.Mesh.Add(mesh);
         }
     }
     foreach (NJS_OBJECT child in obj.Children)
     {
         ProcessModel(child, transform, dest);
     }
     transform.Pop();
 }
コード例 #6
0
ファイル: MainForm.cs プロジェクト: Radfordhound/sa_tools
 private bool DrawSelectedObject(NJS_OBJECT obj, MatrixStack transform, ref int modelindex, ref int animindex)
 {
     transform.Push();
     modelindex++;
     if (obj.Animate) animindex++;
     if (animation != null && animation.Models.ContainsKey(animindex))
         obj.ProcessTransforms(animation.Models[animindex], animframe, transform);
     else
         obj.ProcessTransforms(transform);
     if (obj == selectedObject)
     {
         if (obj.Attach != null)
             for (int j = 0; j < obj.Attach.MeshInfo.Length; j++)
             {
                 Color col = obj.Attach.MeshInfo[j].Material == null ? Color.White : obj.Attach.MeshInfo[j].Material.DiffuseColor;
                 col = Color.FromArgb(255 - col.R, 255 - col.G, 255 - col.B);
                 NJS_MATERIAL mat = new NJS_MATERIAL
                 {
                     DiffuseColor = col,
                     IgnoreLighting = true,
                     UseAlpha = false
                 };
                 new RenderInfo(meshes[modelindex], j, transform.Top, mat, null, FillMode.WireFrame, obj.Attach.CalculateBounds(j, transform.Top)).Draw(d3ddevice);
             }
         transform.Pop();
         return true;
     }
     foreach (NJS_OBJECT child in obj.Children)
         if (DrawSelectedObject(child, transform, ref modelindex, ref animindex))
         {
             transform.Pop();
             return true;
         }
     transform.Pop();
     return false;
 }