Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 20.11.2005, 17:52 Titel: Kapitel 21: Sprites in DirectX 9.c? |
|
|
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 |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.11.2005, 18:01 Titel: |
|
|
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 |
|
|
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 20.11.2005, 18:09 Titel: |
|
|
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.
Kann mir einer das Projekt schicken? tolotos@hotpop.com |
|
Nach oben |
|
|
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 21.11.2005, 20:09 Titel: |
|
|
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 |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 21.11.2005, 20:22 Titel: |
|
|
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 |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 21.11.2005, 20:32 Titel: |
|
|
Tolotos
Mit den DirectX Updates hat sich manches geändert |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 21.11.2005, 20:44 Titel: |
|
|
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 |
|
|
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 21.11.2005, 21:02 Titel: |
|
|
Naja, selber machen als Anfänger???
Gibt es keine andere Lösung? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 21.11.2005, 21:05 Titel: |
|
|
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 _________________ '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 |
|
|
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 21.11.2005, 22:01 Titel: |
|
|
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. |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 21.11.2005, 22:35 Titel: |
|
|
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 |
|
|
Tolotos Mini JLI'ler
Anmeldedatum: 13.11.2005 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 21.11.2005, 23:17 Titel: |
|
|
Ok hier die Lösung die ich suchte, für die, die es interessiert:
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 22.11.2005, 07:13 Titel: |
|
|
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 |
|
|
alexm Mini JLI'ler
Anmeldedatum: 20.11.2005 Beiträge: 15 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 25.05.2006, 11:31 Titel: |
|
|
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? |
|
Nach oben |
|
|
|