Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 02.08.2004, 11:38 Titel: Sprite wird nicht mehr angezeigt |
|
|
Sobald ich mein Sprite drehen will wird es nicht mehr angezeigt. Die z Koordinaten von m_vCenter und m_vPosition sind beide 128.0f. Skalieren kann ich das Sprite auch ohne Probleme nur drehen geht nicht.
Hier ein bisschen Code:
Code: | // Sprite zeichnen
void CSprite::Draw(void)
{
float TempRot = D3DXToRadian(m_Rotation);
D3DXVECTOR3 temp = D3DXVECTOR3(m_vPosition.x + m_vCenter.x,m_vPosition.y + m_vCenter.y,m_vCenter.z);
D3DXMATRIXA16 matCombo, matRot, matScale;
D3DXMatrixRotationY(&matRot,TempRot);
D3DXMatrixScaling(&matScale, m_vScale.x, m_vScale.y, 1.0f);
D3DXMatrixMultiply(&matCombo,&matRot,&matScale);
// Sprite in der passenden Animationsstufe zeichnen
m_Direct3D->DrawSprite(m_vAnimationSequences[m_CurrentAnimation][m_CurrentImage],&m_vCenter,&temp,&matCombo);
} |
Code: | // Ein Sprite zeichnen
void CDirect3D::DrawSprite(LPDIRECT3DTEXTURE9 lpTexture, D3DXVECTOR3* vCenter, D3DXVECTOR3* vPosition, D3DXMATRIXA16* matCombo, D3DCOLOR ModulateColor)
{
m_Sprite->Begin(D3DXSPRITE_DONOTSAVESTATE | D3DXSPRITE_ALPHABLEND);
m_Sprite->SetTransform(matCombo);
m_Sprite->Draw(lpTexture,NULL,vCenter,vPosition,ModulateColor);
m_Sprite->End();
} |
_________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 02.08.2004, 15:31 Titel: |
|
|
probier mal matScale*matRot, nicht matRot*matScale. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.08.2004, 17:03 Titel: |
|
|
Bei einem Spaltenvektor ist die Reihenfolge so: Translation*Rotation*Skalierung
Wenn DX Zeilenvektoren benutzt ist das genau umgekehrt also:
Skalierung*Rotation*Translation
also müsste du das ändern... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 02.08.2004, 19:26 Titel: |
|
|
Ich kenn mich Matrizen nicht aus und hab die Berechnung der Skalierung bzw. Rotation aus den Summer 2003 Beispielen von Christian.
Ich glaube nicht das es daran liegt da es mit Skalierung geht nicht aber mit Rotation. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.08.2004, 09:30 Titel: |
|
|
Hat keiner eine Idee? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.08.2004, 12:01 Titel: |
|
|
Hast du denn schon
Code: |
D3DXMatrixMultiply(&matCombo,&matScale,&matRot);
|
anstatt
D3DXMatrixMultiply(&matCombo,&matRot,&matScale);
ausprobiert? |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.08.2004, 14:43 Titel: |
|
|
Nein, geht genauso wenig. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 12.08.2004, 15:19 Titel: |
|
|
du baust deine rotationsmatrix um Y...sollte aber um Z sein, also D3DXMAtrixRotationZ(). is mir auch grad erst aufgefallen. |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.08.2004, 16:59 Titel: |
|
|
Nein, das geht leider auch nicht. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 12.08.2004, 17:18 Titel: |
|
|
es muß auf jeden fall um Z gedreht werden, das stimmt sicher.
stell mal vPos und vCenter auf 0/0/0 und dann rotiere. da siehst du mal das es funktioniert. dann probier einfach weiter, indem du vPos und vCenter veränderst.
die handhabung der sprites ist jetzt superbeschissen, find ich zumindest. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 12.08.2004, 18:36 Titel: |
|
|
Chewie hat Folgendes geschrieben: | es muß auf jeden fall um Z gedreht werden, das stimmt sicher. | ...
Hast du mal die Tasten so belegt, dass du alle Werte unabhängig noch dazu verändern kannst und dass die Werte auf dem Display für dieses Sprite ausgegeben wird? Das mach ich immer, damit löst man das Problem viel schneller als wenn man Stunden lang nur so nach dem Fehler sucht. Macht zwar erst Arbeit, aber wenn du dich schon so mit der Funktion rumschlägst? Außerdem ist jetzt bestes Wetter für sowas! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
|