Entwickler-Ecke

Multimedia / Grafik - Erste Schritte in DirectX


inek - Sa 12.04.08 22:30
Titel: Erste Schritte in DirectX
Hallo zusammen, bin gerade dabei mich das erste mal mit Direct3D auseinander zu setzen.

vielleicht kann mir jemand bitte kurz erläutern, warum ich mit folgendem code ausgerechnet ein quadrat und ausgerechnet einen farbverlauf bekomme.


also es funktioniert alles... ich versteh nur nicht warum aus den 4 dreiecken ein quadrat gemacht wird und warum ich einen farbverlauf habe..

und welche codeSegmente dafür verantwortlich sind...

mein presentParameter :

C#-Quelltext
1:
2:
3:
4:
5:
m_oPresentParameters = new PresentParameters();

            m_oPresentParameters.SwapEffect = SwapEffect.Discard;
            m_oPresentParameters.Windowed = true;
            m_oDevice = new Device(0, DeviceType.Reference, this, CreateFlags.SoftwareVertexProcessing,m_oPresentParameters);



hier mein Vertex

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
              //vertex Buffer erstellen
                VertexBuffer oVertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 4, form.RenderDevice, Usage.SoftwareProcessing, CustomVertex.TransformedColored.Format, Pool.Managed);


                CustomVertex.TransformedColored[] oVerts = null;


                oVerts = (CustomVertex.TransformedColored[])oVertexBuffer.Lock(0, LockFlags.None);

                oVerts[0].X = 50;
                oVerts[0].Y = form.ClientSize.Height - 50;
                oVerts[0].Color = Color.Red.ToArgb();

                oVerts[1].X = 50;
                oVerts[1].Y = 50;
                oVerts[1].Color = Color.Blue.ToArgb();

                oVerts[2].X = form.ClientSize.Width-50;
                oVerts[2].Y = form.ClientSize.Height-50;
                oVerts[2].Color = Color.Green.ToArgb();

                oVerts[3].X = form.ClientSize.Width-50;
                oVerts[3].Y = 50;
                oVerts[3].Color = Color.Yellow.ToArgb();


und hier meine Render Methode

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public void Render(RenderDelegate oDelegate)
        {
            if (m_oDevice == null)
                return;

            m_oDevice.Clear(ClearFlags.Target, Color.Blue, 1.0f0);
            m_oDevice.BeginScene();

            if (oDelegate != null)
                oDelegate();

            m_oDevice.EndScene();
            m_oDevice.Present();
        }


Kha - So 13.04.08 12:04
Titel: Re: Erste Schritte in DirectX
Sieht nach Managed DX 1.1 aus. Du hast es wahrscheinlich schon gehört ;) , aber dann muss ich dich darauf hinweisen, dass mDX quasi tot ist und durch XNA ersetzt wurde.
user profile iconinek hat folgendes geschrieben:
ich versteh nur nicht warum aus den 4 dreiecken ein quadrat gemacht wird und warum ich einen farbverlauf habe..
4 Vertices, nicht 4 Dreiecke. Und aus wie vielen Punkten besteht ein Viereck :zwinker: ? Der Farbverlauf kommt dann dadurch zustande, dass die Farben der einzelnen Verts über die gesamte Triangle-Fläche interpoliert werden, also einfacher gesagt ineinander verlaufen. Es gibt sicher irgendwelche Webseiten, die dass _etwas_ ausführlicher beschreiben ;) .


SilverMoonGirl - Fr 18.04.08 11:22

Hallo inek :-)

Kann es sein, dass dein Beispiel, das Beispiel aus dem Buch "Managed DirectX und C#" ist? Wenn ja, könntest du mal deinen ganzen Quelltext veröffentlichen? Ich arbeite gerade am selben Beispiel und habe leider kein farbiges Rechteck, sondern nur ein weißes. Ich finde leider auch meinen Fehler nicht. Eigentlich habe ich alles so gemacht, wie das in dem Buch steht :gruebel:


Kha - Fr 18.04.08 13:27

Wenn du immer "TransformedColored" angegeben hast, kann da eigentlich nicht viel schiefgehen :gruebel: . inek wirst du jedenfalls hier [http://www.mycsharp.de/wbb2/profile.php?userid=8882] wahrscheinlich schneller erreichen.


inek - Sa 19.04.08 18:54

Oh... sorry, hab irgendwie nich so viel Zeit gehabt.

hier nochmal meine Solutionnim anhang.