tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
527
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
    Hallo ,
    ich habe folgendes Problem:

    Ich möchte mit DirectX ein rendering in einem Panel vornehmen , den ich auf einem TapPanel habe. Jetzt hab ich aber immer das Problem , dass ich beim starten eine Anwendungsfehler Dialogbox erhalte. Kann mir einer zeigen wie es richtig geht?
     

  2. #2
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hi,

    ein bissel mehr Info wäre nicht schlecht: Wie lautet die Fehlermeldung, wie sieht dein Code aus, welche DirectX-Version verwendest du, ...

    Gruß
    PhoenixLoe
     

  3. #3
    pria pria ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    85
    DirectX 9.0c August 2007
    Die Fehlermeldung ist ein programmerzeugtes Fenster , in dem steht : Es ist ein Fehler in Ihrer Anwendung.
    Aufgrund des Fensters und da ich für meine anderen Fehlermeldungen andere Fenster verwende , ist das ein DX erzeugtes Fenster.
    Hier mein Code:

    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
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
     
    namespace Universe
    {
        class DirectX
        {
            private Device m_device;
            private Panel devpanel;
     
            public DirectX(Panel devicepanel)
            {
                this.devpanel = devicepanel;
                initGFX();
                Render();
            }
     
            public void initGFX()
            {
                try
                {
     
                    PresentParameters pp = new PresentParameters();
     
                    pp.Windowed = false;
                    pp.DeviceWindow = devpanel;
                    pp.SwapEffect = SwapEffect.Copy;
     
                    m_device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, devpanel, CreateFlags.HardwareVertexProcessing, pp);
     
                }
                catch (DirectXException e)
                {
                    MessageBox.Show(e.Message);
                }
     
            }
     
            public void Render()
            {
                m_device.Clear(ClearFlags.Target, Color.Blue, 0.0f, 0);
                m_device.BeginScene();
                // rendern
                m_device.EndScene();
                m_device.Present();
     
            }
     
     
     
     
     
     
     
        }
    }
    Der Fehler liegt an meinem aufruf des Devices, ich weiss aber nicht so recht , wie ich das sonst instanzieren soll, da das Rendering auf einem vorgeschriebenen Bereich meiner Hauptanwendung volzogen werden soll.

    Wie gesagt , brauch ich dabei Hilfe.
     

  4. #4
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Da du in ein Panel rendern willst, solltest du bei PresenParameters die Windowed-Eigenschaft auf true setzen.

    Allerdings wirst du bei diesem Code nach dem Laden der Windows Form kein gerendertes Bild angezeigt bekommen, da die Anzeige nur einmal gezeichnet wird und beim Erscheinen der Form wieder gelöscht wird. Verwende hier einen Thread, der die Render()-Funktion in einer Endlosschleife aufruft.

    Ansonsten funktioniert der Code bei mir so.

    Gruß
    PhoenixLoe
     

  5. #5
    pria pria ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    85
    Ich habs jetzt darauf erweitert:

    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
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
    using System.Threading;
     
    namespace Universe
    {
        class DirectX
        {
            private Device m_device;
            private Panel devpanel;
     
            public DirectX(Panel devicepanel)
            {
                this.devpanel = devicepanel;
                initGFX();
                Thread rendering = new Thread(this.Render);
                rendering.Start();
            }
     
            public 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);
     
                }
                catch (DirectXException e)
                {
                    MessageBox.Show(e.Message);
                }
     
            }
     
            public void Render()
            {
                m_device.Clear(ClearFlags.Target, Color.Blue, 0.0f, 0);
                m_device.BeginScene();
                // rendern
                m_device.EndScene();
                m_device.Present();
     
            }
     
     
     
     
     
     
     
        }
    }

    Die Fehlermeldung ist jetzt verschwunden.
    Eine Frage hab ich noch , wird die Farbe bei m_device.Clear(ClearFlags.Target, Color.Blue, 0.0f, 0); ignoriert?
    Mein Renderingfeld ist immernoch Grau , wenn ich das ausführe.
     

  6. #6
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Nein, der Befehl wird nicht ignoriert. Allerdings sorgst du per 0.0f dafür, dass nichts gelöscht wird. Verwende hier 1.0f, um die Ebene bis zum letzten Rest zu löschen. Dann sollte es funktionieren.

    Gruß
    PhoenixLoe
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 14.07.08, 07:51
  2. Model View Controll
    Von der Prof im Forum Java
    Antworten: 0
    Letzter Beitrag: 02.11.07, 11:41
  3. [VB 2005] WebBrowser Controll - Mit Formulardaten Arbeiten
    Von curzon im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 20.03.07, 10:06
  4. User download controll
    Von Freakshow im Forum Netzwerke
    Antworten: 1
    Letzter Beitrag: 29.08.06, 16:10
  5. Controll-Ping
    Von scrface im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 20.02.03, 08:32