JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=a874eb7021c4dd5347b3dc9d7ef5f30fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kapitel 21: Sprites in DirectX 9.c?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 20.11.2005, 17:52    Titel: Kapitel 21: Sprites in DirectX 9.c? Antworten mit Zitat

Hallo, da ich ja DirectX 9.0c habe gehen leider die Beispiel aus dem Buch nicht.
Das mit der Font aus den vorherigen Kapitel habe ich hinbekommen.
Jetzt hänge ich bei den Sprites.

Die Draw() Funktion nimmt jetzt nur noch 5 Argumente und nicht 7 wie im Buch.
CPP:
HRESULT Draw(
  LPDIRECT3DTEXTURE9 pTexture,
  CONST RECT * pSrcRect,
  CONST D3DXVECTOR3 * pCenter,
  CONST D3DXVECTOR3 * pPosition,
  D3DCOLOR Color
);


Scaling und Rotaion entfallen.
Desweiteren sind es jetzt 3-Dimensionale Vektoren.
Soweit bin ich jetzt:
CPP:
            // Punkt, um den das Sprite gedreht werden soll
            D3DXVECTOR3 vRotationCenter(128.0f, 128.0f,0);

             // Sprite soll an Position 250, 250 gezeichnet werden
            D3DXVECTOR3 vPosition(250.0f, 250.0f,0);

            // Farben der Textur sollen nicht verändert werden
            D3DCOLOR ModulateColor = 0xFFFFFFFF;

            // Sprite zeichnen
            lpSprite->Draw(lpSpriteTexture,
                           NULL,
                           &vRotationCenter,
                           &vPosition,
                           ModulateColor);

            Direct3D.EndScene();


Das ist das Beispiel "FirstSprite" aus dem Buch.
Doch leider wird nichts angezeigt. Nur ein schwarzer Bildschirm.
Was muß noch geändert werden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 20.11.2005, 18:01    Titel: Antworten mit Zitat

CPP:
            Direct3D.BeginScene();
           
            // Zeichnen des Sprites


            // Mittelpunkt des Sprites
            D3DXVECTOR3 vCenter(128.0f, 0.0f, 128.0f);


            // Position des Sprites
            D3DXVECTOR3 vPosition(128.0f, 0.0f, 128.0f);


            // Farben der Textur sollen nicht verändert werden
            D3DCOLOR ModulateColor = 0xFFFFFFFF;

            D3DXMATRIXA16 matCombo, matRot, matScale;
         
            D3DXMatrixRotationY(&matRot,0.0f);
            D3DXMatrixScaling(&matScale, 1.0f, 1.0f, 1.0f);   
            D3DXMatrixMultiply(&matCombo,&matRot, &matScale);
         
         
            lpSprite->Begin(D3DXSPRITE_DONOTSAVESTATE | D3DXSPRITE_ALPHABLEND);
                  
            lpSprite->SetTransform(&matCombo);
                  
            // Sprite zeichnen
            lpSprite->Draw(lpSpriteTexture,
                                   NULL,      
                                   &vCenter,
                                   &vPosition,
                                   ModulateColor);
         
         
            lpSprite->End();
         
            Direct3D.EndScene();

So sollte es eigentlich funktionieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 20.11.2005, 18:09    Titel: Antworten mit Zitat

Nein es geht nicht.
Er wechselt erst in den Vollbild-Modus mit schwarzem Hintergrund. Dann geht er aber eine Sekunde später wieder in den Fenster modus über mit weißem Hintergrund. Confused

Kann mir einer das Projekt schicken? tolotos@hotpop.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 20:09    Titel: Antworten mit Zitat

Also darstellen kann ich das Sprite nun.
Nur Rotieren kann ich es nicht. D.h. nicht richtig.
Wenn ich es so wie der SourceCode oben habe, dann geht es nicht mit

CPP:
D3DXMatrixRotationY(&matRot,0.1f);


sondern nur mit:
CPP:
D3DXMatrixRotationZ(&matRot,0.1f);


Doch da dreht es sich nur um die Linke obere Ecke des Bildschirms.
Nicht um das Zentrum des Sprites.
Habe jetzt schon faste eine Stunde rumprobiert, aber entweder ist das Bild schwarz, oder es dreht sich um die Linke obere Ecke.
Warum sind denn da jetzt plötzlich von Matrix und 3D-Vektoren die Rede.
Sprites sind doch 2D.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 20:22    Titel: Antworten mit Zitat

Schau mal ob du das RotationsCenter richtig angegeben hasst.
Eigentlich brauchst du auch keine Matrizen und 3d vektoren sonder nur 2d vektoren. Du must nur einfach eine Varieble mit der Grad Zahl definieren
und dann hochrechnen und in Bogenmass wenn du es bei dem Sprite angibst umrechnen. °Bogenmass = °Normal(keine Ahnung wie das heißt) * D3DX_PI / 180.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 20:32    Titel: Antworten mit Zitat

Tolotos
Mit den DirectX Updates hat sich manches geändert Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 20:44    Titel: Antworten mit Zitat

Genau dies sind die Gründe wieso ich D3DX verachte: Kein COM. Einfach modularer Müll der nicht orientiert ist.

Dazu weiß man nicht was das Ding unter der Haube hat! Ergo: Self Made Rocks U Man!
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 21:02    Titel: Antworten mit Zitat

Naja, selber machen als Anfänger???
Gibt es keine andere Lösung?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 21:05    Titel: Antworten mit Zitat

Tolotos
Genau für Anfänger ist es umso wichtiger zu wissen, was Sache ist! Man kann keine Matrix multiplizieren wenn man nicht weiß was ein Zeilen und Spaltenvektor ist.

Genau deshalb sollte man als Anfänger sein Hirn so gut wie möglich mit Backgroundwissen vollbomben, damit man später zur Old School gehört und nicht zu dieser Kiddiegesellschaft NewSchool die ein Quake IV innerhalb von 3 Stunden coden will Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 22:01    Titel: Antworten mit Zitat

Wie soll ich was von Matrizen verstehen wenn ich erst Kapitel 21 bin und 3D erst Kapitel 26 beginnt. (Hab zwar schonmal was von TransformationsMatrix und RotationsMatrix in der Schule gehört aber nicht im Bezug aud DirectX)

Ich wollte nur alle Beispiele nachvollziehen. Doch leider gab es Änderungen bei einigen Funktionen.

"Backgroundwissen" ist gut, als her damit. Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 22:04    Titel: Antworten mit Zitat

Tolotos
Backgroundwissen mehr als genug: www.germangamedev.de << FunnyBreak (DirectDraw rocks für 2D Wink)
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 22:35    Titel: Antworten mit Zitat

kauf dir einfach n nettes 3D buch z.B. das von Scherfgen, da steht einiges dirn was man wissen sollte. Natürlich kann man fürn Anfang auch D3DX benutzen, hab ich zum Beispiel bei "Destroy the City" gemacht, mit dem Rotation Center soltle das auch gehen, dazu müsste auch was im Buch stehen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Tolotos
Mini JLI'ler



Anmeldedatum: 13.11.2005
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 21.11.2005, 23:17    Titel: Antworten mit Zitat

Ok hier die Lösung die ich suchte, für die, die es interessiert: Very Happy
CPP:
         Direct3D.BeginScene();
           
        // Position des Sprites
         D3DXVECTOR2 spriteCentre=D3DXVECTOR2(128.0f,128.0f);

         //Position am Bildschirm
         D3DXVECTOR2 trans=D3DXVECTOR2(50.0f,80.0f);

         //Rotieren mit Zeitfunktion
         float rotation=GetTickCount()/500.0f;
               
                        D3DXMATRIX mat;
         D3DXVECTOR2 scaling(1.0f,1.0f);
         D3DXMatrixTransformation2D(&mat,NULL,0.0,&scaling,&spriteCentre,rotation,&trans);
         
         
         lpSprite->Begin(D3DXSPRITE_DONOTSAVESTATE | D3DXSPRITE_ALPHABLEND);
         // Die Matrix übermitteln
         lpSprite->SetTransform(&mat);

         // Sprite Zeichnen
         lpSprite->Draw(lpSpriteTexture,NULL,NULL,NULL,0xFFFFFFFF);
      
         lpSprite->End();
         
         Direct3D.EndScene();


@Jonathan_Klein: Scherfgens Buch hatte ich bevor ich "Jetzt lern ich DirectX 9 und Visual C++" gekauft hatte. Es ist aber für Einsteiger meiner Meinung nicht gut.
Außerdem ist man Verpflichtet alles in seiner Engin TriBase zu realisieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 22.11.2005, 07:13    Titel: Antworten mit Zitat

Jonathan_Klein
Das Buch ist doch für Einsteiger echt Müll. Das ist nur ein Mathematikbuch, aber das Know How vergibt der nirgendwo über GameDev. Dann erklärt er nur wie man seine (grauenhafte) Engine benutzt und nicht wie man seine eigene Codet, geschweige wie man anständig mit Direct3D umgeht.

Dann dieser D3DX Müll, grauenvoll
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
alexm
Mini JLI'ler



Anmeldedatum: 20.11.2005
Beiträge: 15
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 25.05.2006, 11:31    Titel: Antworten mit Zitat

Irgendwie funktionieren gar keine Beispiele mit DX9.0c.
Als "lernender" tut man sich damit dann aber natürlich nicht gerade leicht, wenn man die im Buch beschriebenen Sachen gar nicht nachvollziehen kann.

Wollte mir Kapitel_22\SPRITEBOUNCE ansehen, da ich wissen möchte, wie man ein Sprite lädt und es bewegt. - lässt sich aber nicht kompilieren ... (Kapitel 21 wie hier bereits erwähnt eben auch nicht)

Zitat:

c:\programme\jli beispiele\kapitel_22\spritebounce\direct3d.cpp(93) : error C2660: 'ID3DXFont::DrawTextA' : function does not take 5 arguments
c:\programme\jli beispiele\kapitel_22\spritebounce\direct3d.cpp(96) : error C2660: 'ID3DXFont::DrawTextA' : function does not take 5 arguments
c:\programme\jli beispiele\kapitel_22\spritebounce\direct3d.cpp(130) : error C2664: 'D3DXCreateFontIndirectA' : cannot convert parameter 2 from 'LOGFONT *' to 'const D3DXFONT_DESCA *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
SPRITE.CPP
c:\programme\jli beispiele\kapitel_22\spritebounce\sprite.cpp(177) : warning C4018: '>=' : signed/unsigned mismatch
c:\programme\jli beispiele\kapitel_22\spritebounce\sprite.cpp(191) : error C2660: 'ID3DXSprite::Draw' : function does not take 7 arguments


kann mir da bitte jemand weiterhelfen? Rolling Eyes Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum