ProfilProfil
 Registrieren
 Login
Bild der WocheBild der Woche

(von Tiro)
Kommentare (8)
*****

Weitere
User onlineBenutzer online
Gäste online: 6
Mitglieder online: Glatzemann
Registrierte Mitglieder: 1040
Neustes Mitglied: Fantoma5

Ich versuche es doch mal...Anfängerfragen DX10

Neue Antwort erstellen
 

 

Autor Nachricht
 
 
eclere
Member


Anmeldedatum: 10.09.2009
Beiträge: 15

Antworten mit Zitat
BeitragVerfasst am: 24.07.2010, 12:12    Titel: Ich versuche es doch mal...Anfängerfragen DX10

Hallo,

nachdem ich einen Tag pausiert habe, will ich nun doch mal versuchen mit SlimDX zurecht zu kommen. Ich würde gerne folgendes erreichen:

Im SDK befindet sich das Beispiel SimpleTriangle10. Dieses Dreieck würde ich gerne ich ein Rechteck verändern und statt Farbe mit einer Textur belegen. Anschließend soll es einfach auf der Z-Ebene nach hinten wandern.

- Nun, schaut man sich das Beispiel an fällt auf dass die für das Dreieck glatt sechs Vertices benötigen. Warum? Ich meine man braucht nur drei.
- Ich würde gern das Koordinatensystem verändern. Im Standard scheint es im Hinblick auf meine eher 2D angelegten Geschichten ungeeignet. Kann ich es so abändern wie in GDI+?
- Vorausgesetzt das Koordinatensystem lässt sich abändern, kann ich dann auch gleich die Positionskoordinaten in Pixel angeben?
- Ich werde wohl hauptsächlich Rechtecke(Bilder) zeichnen wollen. Ist es besser und schneller das Rechteck mit zwei Dreiecken aufzubauen und anschließend mit einer Textur zu belegen, oder Sprites zu verwenden?
- Sprites lassen sich auf der Z-Ebene nicht verschieben? Wenn dem so ist müsste ich ja Dreiecke verwenden wenn ich auf der Z-Ebene arbeiten möchte.

So, das fällt mir grad so alles ein. Sorry für die Menge an Fragen.

Gruß Thorsten
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


eclere
Member


Anmeldedatum: 10.09.2009
Beiträge: 15

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 12:10    Titel:

Moin,

nachdem ich mich gestern den ganzen Tag mit SlimDX rumgeschlagen habe, bin ich nun etwas weiter gekommen.

Ich kann nun tatsächlich ein Rechteck aus zwei Dreiecken erstellen, mit Farbe oder Textur belegen. Auch Alphablending funktioniert schon. Für die Poitionierung muss ich mir noch was einfallen lassen. Bisher muss ich jede Koordinate ausrechnen. Mal schauen...

Wo ich grad hänge ist das laden von Texturen im jpg Format. Ich mache das so:
Code:
texture2 = Texture.FromFile(device, @"C:\Users\Public\Pictures\Sample Pictures\Qualle.jpg")

Folgende Exception erhalte ich:
Code:
D3DXERR_INVALIDDATA: Invalid data (-2005529767)


Bei PNG Bildern habe ich dieses Problem nicht.

Weiß einer wo das Problem liegt?

Gruß Thorsten
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3260
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 12:25    Titel:

Für die Positionierung brauchst du eine World-Matrix. Diese verschiebt das Objekt aus dem lokalen Raum in den Welt-Raum...
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


eclere
Member


Anmeldedatum: 10.09.2009
Beiträge: 15

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 14:28    Titel:

Das habe ich schon herausgefunden. Und gerade das finde ich ja so unpraktisch. Ich muss meine Verticien alle mit Werten zwischen (-1) - (1) erstellen. Beim Positionieren muss ich das nach meinem bisherigem Verständnis in die gewünschten Pixel umrechnen. Wenn man bedenkt dass ich nur 2D Objekte zeichnen möchte, ein riesen Aufwand. Vor allem wenn ich schon mal im Vorraus bedenke dass ich irgendwann auch mal prüfen möchte ob die Maus sich über einem Objekt befindet.

Es wäre doch so viel einfacher wenn bekannt ist dass das Fester 800x600 Pixel hat und ich schon bei der Initalisierung sagen könnte dass mein Rechteck die Koordinaten (0,0,50,50) haben soll.

Sattdessen muss ich erst skalieren und dann verschieben Sad Und wenn ich dann Spasshalber doch mal etwas mit der Z-Achse experimentiere, wird gar nichts mehr gerendert. Aber darum kümmere ich mich erst später. Erstmal muss ich dafür sorgen dass die Elemente auch dorch gerendert werden wo ich möchte.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3260
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 14:39    Titel:

Dafür ist die View-Matrix da. Diese transformiert nun vom World-Space in den View-Space.

Lies dir mal ein bisschen Wissen über World, View und Projection-Matrix an, dann verinnerlichst du das ganz schnell...
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


eclere
Member


Anmeldedatum: 10.09.2009
Beiträge: 15

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 17:39    Titel:

Glatzemann hat Folgendes geschrieben:
Lies dir mal ein bisschen Wissen über World, View und Projection-Matrix an, dann verinnerlichst du das ganz schnell...


Wo denn z.B.? Ich lese seit Tagen die Tutorials rauf und runter. Mal ganz abgesehen davon dass jeder gleich mal was animiert, werden Werte präsentiert die in diesem Tut dann auch funktionieren. Übertragen kann ich sie aber nicht. Warum diese Werte her genomen werden ist mir völlig unklar. Also muss ich probieren. Ergebnis: Nichts wird gerendert.
Beispiel:
Code:
 private void CreateVertexBuffer()
        {
            _vertexBuffer = new VertexBuffer(_device, 4 * Marshal.SizeOf(typeof(TexturedVertex)),
                                                Usage.WriteOnly, VertexFormat.None, Pool.Managed);

            var stream = _vertexBuffer.Lock(0, 0, LockFlags.None);
            stream.WriteRange(new[] {
                new TexturedVertex( new Vector3(-1f, 1f, 0f), new Vector2(0f,0f) ),//top left
                new TexturedVertex( new Vector3(1f, 1f, 0f), new Vector2(1f,0f) ), //top right
                new TexturedVertex( new Vector3(1f, -1f, 0f), new Vector2(1f,1f) ), //bottom right
                new TexturedVertex( new Vector3(-1f, -1f, 0f), new Vector2(0f,1f) ), //bottom left
            });

            _vertexBuffer.Unlock();

            _vertexDecl = new VertexDeclaration(_device, new[] {
                new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
                new VertexElement(0, 12, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
                VertexElement.VertexDeclarationEnd
            });

        }

´private void Render()
        {
            _device.Clear(ClearFlags.Target, new Color4(Color.CornflowerBlue), 0, 0);
            _device.SetRenderState(RenderState.CullMode, Cull.None);
            _device.BeginScene();


            _device.SetStreamSource(0, _vertexBuffer, 0, Marshal.SizeOf(typeof(TexturedVertex)));
            _device.VertexDeclaration = _vertexDecl;

            //hier soll das Rechteck erscheinen
            RectangleF rcDest = new RectangleF(50, 100, 400, 300);
            Vector2 vScale = new Vector2(rcDest.Width / (float)ClientRectangle.Width, rcDest.Height / (float)ClientRectangle.Height);

            Matrix mWorld = Matrix.Identity;
            mWorld *= Matrix.Transformation2D(new Vector2(0, 0), 0, vScale, new Vector2(0, 0), 0, new Vector2(0f, 0));

            _device.SetTransform(TransformState.World, mWorld);

            _device.SetTransform (TransformState.View, Matrix.LookAtLH (new Vector3 (0,0,-5f), new Vector3(0,0,0),new Vector3 (0,1,0)));

            _device.SetTexture(0, _texture);
            _device.VertexFormat = VertexFormat.Position | VertexFormat.Texture1;
            _device.DrawPrimitives(PrimitiveType.TriangleFan, 0, 2);


            _device.EndScene();
            _device.Present();
        }


Hier sorgt die Viewmatrix dafür das nichts mehr gerendert wird. Die Frage der Dimensionierung der Werte ist irgendwie unklar. Der erste Vektor ist die eye Position. 0,0 sollte daher mal stimmen. Beim Abstand mit -5f bin ich schon unsicher. Beim zweiten Parameter würde meine Logik dafürhalten die Dimensionen des Fensters einzugeben (new Vector3(800,600,0)). Geht aber nicht. Somit quack. Also probierte ich -1,1,0. Das war es auch nicht.
Der Dritte müsste eigentlich (0,0,0) sein da ich in 2D ja weder nach oben, noch nach unten schaue.

Vielleicht magste mir da mal etwas auf die Sprünge helfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3260
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 25.07.2010, 18:08    Titel:

Schau mal bei Riemers, die 3D-Terrain Tutorials. Da wird das z.B. erklärt.

Ist zwar für XNA, aber das Prinzip ist gleich...
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Ganda
Member


Anmeldedatum: 29.10.2009
Beiträge: 520
Wohnort: Germany, NRW

Antworten mit Zitat
BeitragVerfasst am: 26.07.2010, 10:03    Titel:

Da haben wir es mit unserem Framework doch echt leichter!

CreateLookAt und CreatePerspectiveFieldOfView sind doch eine super Hilfe und leicht verständlich!

Gruß Ganda
_________________
Mein Gameblog!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


eclere
Member


Anmeldedatum: 10.09.2009
Beiträge: 15

Antworten mit Zitat
BeitragVerfasst am: 28.07.2010, 13:04    Titel:

Das kenne ich sogar. Wenn Du aber nun versuchen würdest das Beispiel so abzuändern dass Du das Dreieck Pixelgenau positionieren kannst, ist es dann doch nicht mehr so einfach. Mir hat sich nämlich nach wie vor nicht erschlossen wann ich welche Koordinaten einzugeben habe. Und das steht dort auch nicht. Ob es da nicht enthalten ist weil eine Selbstverständlichkeit vorrausgesetzt wird oder ich zu blöd bin...keine Ahnung.

Wobei ich sagen muss dass ich mit seeehhhr viel Geduld nun mein Rechteck zumindest sehen kann. Spass hat man dabei aber nicht wirklich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Beiträge der letzten Zeit anzeigen:   
 
Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de