Problem mit DirectX

pria

Mitglied
Moin,
ich wollt mal ein DirectX-Programm schreiben und hatte hier schonmal ein Thread für ein DirectX-Panel eröffnet. Hat alles soweit geklappt , wollte jetzt allerdings mal n 3D-Objekt rendern und wie es der Zufall so will , wird das nicht angezeigt. Ich hab dann nochmal versucht Text zu rendern und das klappt aber. Meine Frage ist , ob mir jemand sagen kann , woran das liegt?

Code:
        private Device m_device;
        private Panel devpanel;
        internal LightsCollection Lights
        {
            get { return m_device.Lights; }
        }
        private Mesh meshes;
        private Font[] renderTextStyle = new Font[0];
        private string[,] renderText = new string[0, 4];
        private Matrix World = new Matrix();

        internal Rendering(Panel devicepanel)
        {
            this.devpanel = devicepanel;
            initGFX();

        }

        internal void initGFX()
        {
            try
            {

                PresentParameters pp = new PresentParameters();

                pp.Windowed = true;
                pp.DeviceWindow = devpanel;
                pp.SwapEffect = SwapEffect.Copy;

                m_device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, devpanel, CreateFlags.HardwareVertexProcessing, pp);

                //Vector3 size;
                //meshes = create3DText("Hallo", new System.Drawing.Font("Arial", 12), 0.001F, 0.5F, out size);
                meshes = Mesh.Box(m_device, 2.0f, 1.0f, 2.0f);
            }
            catch (DirectXException e)
            {
                MessageBox.Show(e.Message);
            }

        }

        internal void Render()
        {
            m_device.Clear(ClearFlags.Target,devpanel.BackColor, 0.0f, 0);
            m_device.BeginScene();
            // rendern
             //m_device.Transform.World = Matrix.Identity;
             meshes.DrawSubset(0);
             for (int i = 0; i < renderTextStyle.Length; i++)
              if (renderTextStyle[i] != null)
               renderTextStyle[i].DrawText(null, renderText[i, 0], new System.Drawing.Point(Convert.ToInt16(renderText[i, 1]), Convert.ToInt16(renderText[i, 2])), System.Drawing.Color.FromArgb(Convert.ToInt16(renderText[i, 3])));
            // @rendern
            m_device.EndScene();
            m_device.Present();

        }

Ich hab in meiner aufrufenden Klasse nurnoch eine Deklaration und einen Timer , der alle 100ms die Rendern-Methode aufruft.
 
Ich habe meinen Quellcode umgestellt und unten stehendes bild herausbekommen.

Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Frost
{
	public partial class MainFrame : Form
	{
		private Device m_device;
        private Mesh meshes;
        private Matrix World = new Matrix();

        #region Initialisation
        public MainFrame()
		{
            CheckClient();
            this.BackColor = Color.Blue;
            this.ClientSize = new System.Drawing.Size(600,600);
            this.ShowIcon = false;
            this.Text = "Frost";
            this.MouseClick += new MouseEventHandler(rePanel1_MouseClick);
            this.MouseMove += new MouseEventHandler(rePanel1_MouseMove);
            this.MouseWheel += new MouseEventHandler(rePanel1_MouseWheel);
            this.MouseDown += new MouseEventHandler(rePanel1_MouseDown);
            this.MouseUp += new MouseEventHandler(rePanel1_MouseUp);
            this.KeyDown += new KeyEventHandler(MainFrame_KeyDown);
            this.KeyPress += new KeyPressEventHandler(MainFrame_KeyPress);
            this.KeyUp += new KeyEventHandler(MainFrame_KeyUp);
			this.SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true );
		}

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
			this.Render();
			this.Invalidate();
        }

		protected override void Dispose(bool disposing)
		{
			base.Dispose( disposing );
		}

		static void Main() 
		{
			using( MainFrame m = new MainFrame() )
			{
				m.Show();
				m.InitGFX();                
				Application.Run( m );
                m.Invalidate();
			}
        }
        #endregion

        #region Direct3D
        private void InitGFX()
        {
            if (!Manager.CheckDeviceFormat(Manager.Adapters.Default.Adapter,
                                           DeviceType.Hardware,
                                           Manager.Adapters.Default.CurrentDisplayMode.Format,
                                           Usage.DepthStencil,
                                           ResourceType.Surface,
                                           DepthFormat.D16))
            {
                return;
            }


            Caps caps = Manager.GetDeviceCaps(Manager.Adapters.Default.Adapter,
                                               DeviceType.Hardware);
            CreateFlags flags;

            if (caps.DeviceCaps.SupportsHardwareTransformAndLight)
                flags = CreateFlags.HardwareVertexProcessing;
            else
                flags = CreateFlags.SoftwareVertexProcessing;

            PresentParameters pp = new PresentParameters();

            pp.BackBufferFormat = Format.Unknown;
            pp.SwapEffect = SwapEffect.Discard;
            pp.Windowed = true;
            pp.EnableAutoDepthStencil = true;
            pp.AutoDepthStencilFormat = DepthFormat.D16;
            pp.PresentationInterval = PresentInterval.Immediate;

            m_device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, this, flags, pp);

            meshes = Mesh.Teapot(m_device);
            
        }

		private void Render()
		{
            m_device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, this.BackColor, 1.0f, 0);
            m_device.BeginScene();
             //rendern
              m_device.Transform.World = Matrix.Identity;
              meshes.DrawSubset(0);
             //@rendern
            m_device.EndScene();
            m_device.Present();
        }

        private void setCam(Vector3 camPos,Vector3 target,Vector3 up)
        {
            m_device.Transform.View = Matrix.LookAtLH(camPos, // Camera position
                                                        target,   // Look-at point
                                                        up);  // Up vector
        }
        #endregion

        #region Other
        void CheckClient()
        {
            if ((Environment.WorkingSet / 8 / 1024) <= 512)
                MessageBox.Show("Es wurde wenig Arbeitsspeicher ermittelt. Dies kann eventuell zu Problemen führen.");
            if (Laptop_Battery.GetStatus().BatteryFlag != Laptop_Battery.BatteryFlag.NoSystemBattery)
                if (Laptop_Battery.GetStatus().BatteryFlag == Laptop_Battery.BatteryFlag.Low || Laptop_Battery.GetStatus().BatteryFlag == Laptop_Battery.BatteryFlag.Critical)
                    MessageBox.Show("Der Ladezustand der Batterie Ihres Laptops ist sehr gering. Dies kann eventuell zu Problemen führen.");
        }

        void MainFrame_KeyUp(object sender, KeyEventArgs e)
        {
            Eventquee.KeyUp(sender, e, this);
        }

        void MainFrame_KeyPress(object sender, KeyPressEventArgs e)
        {
            Eventquee.KeyPress(sender, e, this);
        }

        void MainFrame_KeyDown(object sender, KeyEventArgs e)
        {
            Eventquee.KeyDown(sender, e, this);
        }

        void rePanel1_MouseUp(object sender, MouseEventArgs e)
        {
            Eventquee.MouseUp(sender, e, this);
        }

        void rePanel1_MouseDown(object sender, MouseEventArgs e)
        {
            Eventquee.MouseDown(sender, e, this);
        }

        void rePanel1_MouseWheel(object sender, MouseEventArgs e)
        {
            Eventquee.MouseWheel(sender, e, this);
        }

        void rePanel1_MouseMove(object sender, MouseEventArgs e)
        {
            Eventquee.MouseMove(sender, e, this);
        }

        void rePanel1_MouseClick(object sender, MouseEventArgs e)
        {
            Eventquee.MouseClick(sender, e, this);
        }
        #endregion
    }
}

Ist denn hier keiner in der Lage mir u helfen?
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    10,9 KB · Aufrufe: 38

Neue Beiträge

Zurück