 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 01.06.2004, 11:44 Titel: Draw (Sprite) bringt das ganze Programm durcheinander |
|
|
Hi,
ich habe wie fallen ein Problem mit der Draw Funktion von LPD3DXSPRITE.
Mein Code sieht folgendermaßen aus:
Code: |
//Draws the sprite
void CSprite::Draw(int iX,int iY)
{
//Sets the postion
m_vPosition.x = (float)iX + m_vRotationCenter.x;
m_vPosition.y = (float)iY + m_vRotationCenter.y;
//Transform matrix
D3DXMATRIX SpriteMatrix,Translation,Scale,Rotation;
//Sets the matrix
D3DXMatrixRotationZ(&Rotation,m_fRotation);
D3DXMatrixScaling(&Scale,m_vScale.x,m_vScale.y,m_vScale.z);
D3DXMatrixTranslation(&Translation,m_vPosition.x,m_vPosition.y,m_vPosition.z);
//Multiplies it
D3DXMatrixMultiply(&SpriteMatrix,&Rotation,&Scale);
D3DXMatrixMultiply(&SpriteMatrix,&SpriteMatrix,&Translation);
//Begins with drawing the sprite
m_lpSprite->Begin(m_dwFlags);
//Transforms it
m_lpSprite->SetTransform(&SpriteMatrix);
//without an animation
if(m_bAnimated == false)
{
//Draws it without an animation
m_lpSprite->Draw(m_lpImage,0,&m_vRotationCenter,NULL,D3DCOLOR_ARGB(m_iAlpha,0xff,0xff,0xff));
}
else
{
//Draws it with an animation
m_lpSprite->Draw(m_lpImage,&m_Rect,&m_vRotationCenter,NULL,D3DCOLOR_ARGB(m_iAlpha,0xff,0xff,0xff));
}
m_lpSprite->End();
}
|
Wenn ich
Code: |
Sprite.Draw(140,50);
DXFont.DrawText("Dragon Studios",280,420,D3DCOLOR_ARGB(iAlphaBuffer,255,0,0));
|
mache, dann wird die Schrift nur so angezeigt:
Wenn ich aber das hier mache:
Code: |
DXFont.DrawText("Dragon Studios",280,420,D3DCOLOR_ARGB(iAlphaBuffer,255,0,0));
Sprite.Draw(140,50);
|
dann funktioniert es.
Ich dachte es würde vielleicht funktionieren, wenn ich das summer update installiere, jetzt habe ich aber noch zusätzlich das Problem, das der Würfel, den ich in diesem Programm zeichne überhaupt nicht angezeigt wird.
Wenn ich m_lpSprite->Draw auskommentiere funktioniert auch alles.
Ich habe das an 4 anderen pc's getestet, bei denen funktioniert das mit der Schrift einwandfrei, aber der Würfel kommt nicht.
[edit]
Ich habe gerade das bsp Programm von Christian geteste, bei dem geht der Text bei mir auch nicht. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling
Zuletzt bearbeitet von abc_d am 02.06.2004, 15:55, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 01.06.2004, 12:21 Titel: |
|
|
Sagt die Debug Runtime irgendwas, was sagt das Reference Device? |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 02.06.2004, 16:33 Titel: |
|
|
Mit Reference Device zeigt es den Text an. Aber der Würfel wird nur angezeigt, wenn das Sprite nicht gezeichnet wird/wurde.
Beim debuggen bekomme ich auch keinen Fehler. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling
Zuletzt bearbeitet von abc_d am 05.06.2004, 23:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 06.06.2004, 18:03 Titel: |
|
|
Das bekommt ich beim debuggen.
Direct3D9: :====> ENTER: DLLMAIN(01753950): Process Attach: 00000c50, tid=00000930
Direct3D9: (WARN) :Executing processor detection code (benign first-chance exception possible)
Direct3D9: (INFO) :MMX detected
Direct3D9: (INFO) :Pentium Pro CPU features (fcomi, cmov) detected
Direct3D9: (INFO) :dwCPUFamily = 6, dwCPUFeatures = 3
Direct3D9: (INFO) :szCPUString = GenuineIntel
Direct3D9: :====> EXIT: DLLMAIN(01753950): Process Attach: 00000c50
Direct3D9: (INFO) :Direct3D9 Debug Runtime selected.
Direct3D9: (INFO) :======================= Hal SWVP device selected
Direct3D9: (INFO) :HalDevice Driver Style 9
Direct3D9: :BackBufferCount not specified, considered default 1
Direct3D9: :DoneExclusiveMode
Direct3D9: (INFO) :Using P3 PSGP
"C:\WINDOWS\system32\usp10.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\hid.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\setupapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\oleaut32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\ole32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
Direct3D9: (ERROR) :Vertex stride in stream 0 is less than in the declaration
Direct3D9: (ERROR) :DrawPrimitive failed.
Direct3D9: (ERROR) :Vertex stride in stream 0 is less than in the declaration
Direct3D9: (ERROR) :DrawPrimitive failed. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling
Zuletzt bearbeitet von abc_d am 06.06.2004, 18:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.06.2004, 18:07 Titel: |
|
|
Naja, irgendwas ist faul Die Daten, die du mit SetFVF() oder SetVertexDeclaration() bzw. SetStreamSource() setzt passen nicht zusammen. Guck mal, was du für Stride übergibst. Ist das genauso groß wie sizeof(VERTEX_STRUKTUR) ?
C. |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 10.06.2004, 09:11 Titel: |
|
|
Ja, sizeof(CustomVertex)
Ich habe jetzt den ganzen Code vom Beispiel kopiert, aber es funktioniert immer noch nicht:
Code: |
Init:
// Zeiger, der auf den Vertex Buffer gesetzt wird
BYTE* VertexBufferStart;
// Vertex Buffer für das Dreieck anlegen
// die Größe des Vertex Buffer muss mit
// der Größe der Struktur, in der das Dreieck
// gespeichert ist, übereinsimmen
lpD3DDevice->CreateVertexBuffer(sizeof(TriangleVertices),
D3DUSAGE_WRITEONLY,
D3D_CUSTOMVERTEX,
D3DPOOL_MANAGED,
&VB_Triangle,
NULL);
// Vertex Buffer sperren
VB_Triangle->Lock(0,0,(void**)&VertexBufferStart,0);
// Vertices des Dreiecks in den Puffer kopieren
memcpy(VertexBufferStart,TriangleVertices,sizeof(TriangleVertices));
// Vertex Buffer wieder freigeben
VB_Triangle->Unlock();
// Vertex Buffer für das Dreieck anlegen
lpD3DDevice->CreateVertexBuffer(sizeof(CubeVertices),
D3DUSAGE_WRITEONLY,
D3D_CUSTOMVERTEX,
D3DPOOL_MANAGED,
&VB_Cube,
NULL);
// Vertex Buffer sperren
VB_Cube->Lock(0,0,(void**)&VertexBufferStart,0);
// Daten des Dreiecks in der Buffer kopieren
memcpy(VertexBufferStart,CubeVertices,
sizeof(CubeVertices));
// Vertex Buffer wieder freigeben
VB_Cube->Unlock();
// Die Kamera wird an der Position (0.0f, 0.0f, -10.0f) aufgestellt
D3DXMATRIX ViewMatrix;
D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3(0.0f, 0.0f,-10.0f),
&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
lpD3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);
// Sichtkegel definieren
D3DXMATRIX ProjMatrix;
D3DXMatrixPerspectiveFovLH(&ProjMatrix,
D3DX_PI/4,
(float)SCR_WIDTH / (float)SCR_HEIGHT,
1.0f,
100.0f );
lpD3DDevice->SetTransform(D3DTS_PROJECTION,&ProjMatrix);
// Beleuchtung abschalten
lpD3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
Sprite.CreateSprite(lpD3DDevice,"test.PNG");
return TRUE;
Zeichnen:
//Matrix
D3DXMATRIX WorldMatrix;
D3DXMATRIX RotationMatrix;
D3DXMATRIX TranslationMatrix;
//Gets the device
lpD3DDevice = DXGraphics.GetDevice();
// Deletes the screen D3DCOLOR_XRGB(0,125,232,232)
DXGraphics.Clear();
// Begin with presenting
DXGraphics.BeginScene();
// Das Vertex-Format festlegen
lpD3DDevice->SetFVF(D3D_CUSTOMVERTEX);
// die Quelle für das Dreieck setzen
lpD3DDevice->SetStreamSource(0,VB_Triangle,0,sizeof(CustomVertex));
// das Dreieck nach links schieben
D3DXMATRIX TransMatrix;
D3DXMatrixTranslation(&TransMatrix,-2.0f,0.0f,0.0f);
lpD3DDevice->SetTransform(D3DTS_WORLD,&TransMatrix);
// Das Dreieck ist das erste Element im Puffer
// und es wird genau ein Objekt gezeichnet
lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
// die Quelle für den Würfel setzen
lpD3DDevice->SetStreamSource(0,VB_Cube,0,sizeof(CustomVertex));
// Rotationsmatrix für den Würfel erstellen
D3DXMatrixRotationX(&RotationMatrix,fCubeRotateX);
// Translationsmatrix für den Würfel erstellen
D3DXMatrixTranslation(&TranslationMatrix,0.0f,0.0f,fCubeTranslationZ);
// Die beiden Matrizen zusammenfassen
D3DXMatrixMultiply(&WorldMatrix,&RotationMatrix,&TranslationMatrix);
// und die neue Matrix als Welt-Transformation-
// Matrix nutzen
lpD3DDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);
lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,12);
lpD3DDevice->SetIndices( 0 );
lpD3DDevice->SetStreamSource( 0,0, 0,0);
// Das Vertex-Format festlegen
lpD3DDevice->SetFVF(D3DFVF_NORMAL);
Sprite.Draw(100,100);
// Die Szene ist beendet
DXGraphics.Present();
|
Seidem ich vor dem Zeichnen des Sprites SetIndices(),SetStreamSource( 0,0, 0,0) und SetFVF(D3DFVF_NORMAL); mache kommt beim debugen kein Fehler mehr.
Die 3D Objekte werden beim ersten mal gezeichnet, aber sobald ich das Sprite zum erstenmal zeichne werden sie nicht mehr dargestellt. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 13.06.2004, 15:52 Titel: |
|
|
Hat hier noch nie jemand ein Sprite + ein 3D Modell gerendert? _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.06.2004, 16:17 Titel: |
|
|
Doch Schick doch mal das Projekt mit allem was dazu gehöhrt per mail. |
|
Nach oben |
|
 |
|
|
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
|