1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| public class BXMesh_Polygon : BXBasisMesh { private Mesh m_Mesh = null; public BXMesh_Polygon(BXGrafik grafik, string name) { ErschaffeEigenschaften(grafik, BXMeshTyp.Polygon, name); } public override Mesh GibMesh() { return m_Mesh; } public override void Initialisieren() { short[] index = {0, 1, 2}; CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3]; verts[0] = new CustomVertex.PositionColored(0, 1, 0, Color.Blue.ToArgb()); verts[1] = new CustomVertex.PositionColored(-1, -0.25f, 0, Color.Green.ToArgb()); verts[2] = new CustomVertex.PositionColored(1, -0.25f, 0, Color.Orange.ToArgb()); m_Mesh = new Mesh(1, 3, MeshFlags.Managed, CustomVertex.PositionColored.Format, Grafik.Device); m_Mesh.SetVertexBufferData(verts, LockFlags.None); m_Mesh.SetIndexBufferData(index, LockFlags.None); Vector3 vektor = new Vector3(); float radius = 0; GraphicsStream str = m_Mesh.LockVertexBuffer(LockFlags.None); radius = Geometry.ComputeBoundingSphere(str, m_Mesh.NumberVertices, m_Mesh.VertexFormat, out vektor); m_Mesh.UnlockVertexBuffer(); Sphere = new BXSphere(vektor, radius); RessourcenStatus = BXRessourcenStatus.Initialisiert; } public override void Entfernen() { if(m_Mesh != null) { m_Mesh.Dispose(); m_Mesh = null; RessourcenStatus = BXRessourcenStatus.Entfernt; } } }
SzeneKnoten:
public class BXSzeneKnoten_BasisMesh : BXSzeneKnoten { private BXBasisMesh m_BasisMesh = null; public BXSzeneKnoten_BasisMesh(BXGrafik grafik, string name, BXBasisMesh mesh) { m_BasisMesh = mesh; ErschaffeEigenschaften(grafik, BXSzeneKnotenTyp.BasisMesh, name); Reset(); } public override void VorDemRendern(float zwischenZeit) { if(Sichtbar) { if(m_BasisMesh != null)Aktualisieren(m_BasisMesh); if(Grafik.Level.Kamera3D.SphereInFrustum(Sphere.Position, Sphere.Radius))Grafik.RenderManager.RegistriereSzeneKnoten(this, BXRenderfolge.Solide); Kind_VorDemRendern(zwischenZeit); } } public override void Rendern() { if(m_BasisMesh.RessourcenStatus == BXRessourcenStatus.Initialisiert) { Grafik.Device.RenderState.ColorVertex = true; Grafik.Device.RenderState.CullMode = Cull.Clockwise; Grafik.Device.SetTransform(TransformType.World, AbsoluteTransformation); Grafik.Device.VertexFormat = m_BasisMesh.GibDirect3DMesh().VertexFormat; m_BasisMesh.GibDirect3DMesh().DrawSubset(0); } } |