Jedes Mesh rendern



  • Hallo,

    ich hab mir eine kleine Klasse geschrieben um Meshes zu laden,
    mit Hilfe einer OpenFileDialog box. Zur Zeit ist es so, dass
    er das vorherige Mesh löscht, ich möchte aber, dass ein Mesh
    hinzugefügt wird und dann auch gerendert wird. Wie müsste ich das
    anstellen?

    Im Moment sieht es so aus:

    class Importer
        {
            #region Variables
            Mesh[] xfile = new Mesh[4096];
            int index = 0;
            #endregion
    
            #region Constrctor
            public Importer()
            {
            }
            #endregion
    
            #region Methods
            public void LoadXFile(string filename, Device device)
            {
                xfile[index] = Mesh.FromFile(filename, MeshFlags.Managed, device);            
                index = index + 1;
            }
    
            public void Drawmesh()
            {
                foreach (Mesh mesh in xfile)
                {
                    xfile[index-1].DrawSubset(0);
                }
            }
            #endregion
    
        }
    

    Für Ideen wäre ich dankbar.

    drawmesh komplett raus, und über eine andere klasse einfach mit arraylist?



  • Guck dir mal deine Drawmesh()-Methode an und sag mal, was die deiner Meinung nach macht.
    Hast du den Code überhaupt selbst geschrieben?



  • vorher wars nur

    public void Drawmesh()
            {
                    xfile.DrawSubset(0);
            }
    

    damit kann ich immer nur ein mesh darstellen.
    Überlegung war, ich brauch ein array, wo ich meshes einpacken kann,
    und dann soll er alle rendern die dadrin sind.



  • adonis schrieb:

    und dann soll er alle rendern die dadrin sind.

    Dann mach das doch.
    So wie dein Code jetzt ist, rendert er das letzte Mesh N-mal (N: Anzahl der Meshes).



  • ich werds mal probieren.
    ob ich es selbst geschrieben hab?
    ja, probiere son bischen über die Tutorials hinaus zu kommen.
    Weiss allerdings noch nicht ob das alles so sinnvoll ist bis jetzt.

    Versuche ein paar klassen zu schreiben um mir das leben zu vereinfachen.

    Hab atm nur 2 klassen.

    das ist meine 2.

    class Graphic_Helper
        {
            #region Variables
    
            private PresentParameters pp = null;
            public Device device;
            private int xres, yres;
    
            #endregion
    
            #region Constructor
    
            public Graphic_Helper()
            {
            }
    
            #endregion
    
            #region Methods
    
            public void SetDisplayMode(int resx, int resy, IntPtr hwnd, bool windowed, DepthFormat ADeptFormat)
            {
                xres = resx;
                yres = resy;
                pp = new PresentParameters();
                pp.BackBufferWidth = resy;
                pp.BackBufferHeight = resx;
    
                pp.EnableAutoDepthStencil = true;
                pp.AutoDepthStencilFormat = ADeptFormat;
                pp.BackBufferCount = 2;
                pp.BackBufferFormat = Format.X8R8G8B8;
                pp.SwapEffect = SwapEffect.Discard;
                pp.Windowed = windowed;
                device = new Device(0, DeviceType.Hardware, hwnd, CreateFlags.HardwareVertexProcessing | CreateFlags.PureDevice, pp);
    
            }
    
            public void CreateCamera()
            {
                device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, xres/ yres, 1.0f, 100.0f);
                device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 10), new Vector3(), new Vector3(0, 1, 0));
            }
    
            public void CreateLight()
            {
            }
    
            public void ClearDevice(System.Drawing.Color color)
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, color, 2, 2);
            }
    
            public void BeginScene()
            {
                device.BeginScene();
            }
    
            public void RenderMesh(Importer importer)
            {
                    importer.DrawMesh();
            }
    
            public void EndScene()
            {
                device.EndScene();
            }
    
            public void PresentScene()
            {
                device.Present();
            }
    
            #endregion
        }
    

    Hoffe dass ich da im Ansatz halbwegs richtig liege, muss noch viel rumbasteln.


Anmelden zum Antworten