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