tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
642
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    pria pria ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    85
    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 :
    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
    
            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.
     

  2. #2
    pria pria ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    85
    Ich habe meinen Quellcode umgestellt und unten stehendes bild herausbekommen.

    Code :
    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    
    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?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Problem mit DirectX-unbenannt.jpg  
     

Ähnliche Themen

  1. Problem mit Verweis auf DirectX
    Von Rene42 im Forum .NET Grafik und Sound
    Antworten: 1
    Letzter Beitrag: 11.12.10, 15:50
  2. DirectX problem
    Von GSlang im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 30.08.10, 10:33
  3. Problem mit DirectX installation
    Von cycovery im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 17.06.05, 08:46
  4. directX problem
    Von alixander im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 07.04.04, 11:03
  5. Directx Problem
    Von foxx21 im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 16.10.03, 16:54