JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Problem mit Partikeln! Brauch dringen Hilfe!
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 09.06.2003, 21:11    Titel: Problem mit Partikeln! Brauch dringen Hilfe! Antworten mit Zitat

Hallo,

ich hab zur Zeit n Problem mit meinem Pointsprite Partikelsystem. Und zwar, wenn ich zum Beispiel ne Wolke mach, ist diese immer gleich groß (auf dem Monitor, dass heisst im 3D-Raum wird sie, wenn ich nah hingeh kleiner, usw. ...). Ab einer größeren Entfernung hat die Wolke aber dann die richtige größe und verändert sich auch nicht, solange ich nicht wieder hingeh.

Also warum hab ich diesen Bug, dass mein Partikel, auf dem Monitor, immer gleich groß ist, egal wie weit ich weg bin. Das Komische dazu ist auch noch, dass ich genau den gleichen Code für die Partikel im Projekt davor benutzt habe und alles wunderbar geklappt hat...muss wahrscheinlich irgendwo an der Kamera liegen oder DX, also bitte sagt mal worans liegen könnte...

Noch was...bis zu einer Partikelgröße von 0.08 geht das, erst wenn die Partikel größer sind, tritt dieser fehler auf...sogar im PointSprites-Sample von Microsoft tritt dieser Fehler auf (öffnet das Projekt mal und gebt bei POINTSIZE 5.0f oder so anstatt 0.08f ein...und compiliert dann das Programm...ihr werdet sehn die Partikel werden erst dann größer wenn man mit der Kamera weggeht)

Also kann mir jemand bitte sagen wie man diesen Fehler beheben kann?

danke
Claudio
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 09.06.2003, 21:16    Titel: Antworten mit Zitat

Das liegt daran, dass Pointsprites maximal 64x64 Pixel groß dargestellt werden können. Um das zu umgehen gibt es eigentlich nur die Möglichkeit, keine Pointsprites mehr zu verwenden und stattdessen eigene Vierecke aus vier Vertices zu nehmen und diese immer an der Kamera auszurichten (Billboarding).
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 10.06.2003, 16:30    Titel: Antworten mit Zitat

ok, danke..also muss ich wohl billboard machen..wenn ich damit Probleme hab, post ichs nochmal Wink
hat jemand gute Tutorials
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 10.06.2003, 16:51    Titel: Antworten mit Zitat

ich brauch mal hilfe wie ich am unkomplizierstesten mein Billboard-Partikel immer zur Kamera ausrichten kann...im DirectX 8 SDK ist ja ein Sample dabei, dort wird aber nur um die Y Achse rotiert (weil Bäume) ich muss aber um alle Achsen rotieren...wie funktioniert das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.06.2003, 16:57    Titel: Antworten mit Zitat

Ich denke mal, das funktioniert gleich Laughing
Du schreibst wahrscheinlich einfach für 'Y' 'X' hin und dann sollte es funzen.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 10.06.2003, 21:01    Titel: Antworten mit Zitat

ne glaub nicht:
Code:

   if( sicht.x > 0.0f )
        D3DXMatrixRotationY( &bill, -atanf(sicht.z/sicht.x)+D3DX_PI/2 );
    else
        D3DXMatrixRotationY( &bill, -atanf(sicht.z/sicht.x)-D3DX_PI/2 );


das ist der code, wenn ich da für y x und z eingeb hilft das nichts, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 12:07    Titel: Antworten mit Zitat

Ich weiß zwar nicht, was di ganzen Variablen bedeuten(bill,atanf,sicht.x,sicht.y), aber wenn du einfach 'D3DXMatrixRotationX' oder 'D3DXMatrixRotationZ' schreibst, dann sollte es eigentlich funktionieren. Dann musst du eben noch bei den Parametern den richtigen Algo rausfinden.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 12:41    Titel: Antworten mit Zitat

Eine Billboardmatrix zu bekommen ist viel einfacher. Man muss einfach die View-Matrix der Kamera Transponieren.
Code:
D3DXMATRIX matView, matBillboard;

//View-Matrix holen
pd3dDevice->GetTransform(D3DTS_VIEW,&matView);

//die Verschiebung der Kamera interessiert uns nicht
matView._41=matView._42=matView._43=0.0f;

D3DXMatrixTranspose(&matBillboard,&matView);

//Position deines Billboards
matBillboard._41=fPosX;
matBillboard._42=fPosY;
matBillboard._43=fPosZ;

Was Matrix transponieren heißt, steht hier: http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q8
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 13:36    Titel: Antworten mit Zitat

Jörg hat Folgendes geschrieben:
Eine Billboardmatrix zu bekommen ist viel einfacher. Man muss einfach die View-Matrix der Kamera Transponieren.
Code:
D3DXMATRIX matView, matBillboard;

//View-Matrix holen
pd3dDevice->GetTransform(D3DTS_VIEW,&matView);

//die Verschiebung der Kamera interessiert uns nicht
matView._41=matView._42=matView._43=0.0f;

D3DXMatrixTranspose(&matBillboard,&matView);

//Position deines Billboards
matBillboard._41=fPosX;
matBillboard._42=fPosY;
matBillboard._43=fPosZ;

Was Matrix transponieren heißt, steht hier: http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q8


ok, gut, aber könntest du villeicht den ganzen Code posten, also auch noch die paar Zeilen die da drunter stehen?
Stimmt es außerdem, dass "die Verschiebung der Kamera uns nicht interessiert"?
Weil die Kamera bewegt sich bei mir ja.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 14:41    Titel: Antworten mit Zitat

Was meinst du mit den "paar Zeilen die da drunter stehen"?
Die Billboard-Matrix musst du jetzt einfach, bevor du dein Billboard renderst, als Worldmatrix setzen.

Die Position der Kamera ist uns insofern egal (du musst sie sogar entfernen), dass das Billboard ja immer nur an der Kamera ausgerichtet werden, jedoch nicht mit ihr verschoben werden soll.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 14:53    Titel: Antworten mit Zitat

Code:

   D3DXMATRIX matView;
    // Set diffuse blending for alpha set in vertices.
    device->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );


 
    // Loop through and render all
    device->SetStreamSource( 0, billvb, sizeof(VERTEX) );
    device->SetVertexShader( D3DFVF_VERTEX );
    for( int i=0; i<anzahl; i++ )
    {
        // Set texture
        device->SetTexture(0, textur);

 

      //View-Matrix holen
      device->GetTransform(D3DTS_VIEW,&matView);

      //die Verschiebung der Kamera interessiert uns nicht
      matView._41=matView._42=matView._43=0.0f;



      D3DXMatrixTranspose(&bill,&matView);

      //Position deines Billboards
      bill._41=teile[i].vPos.x;
      bill._42=teile[i].vPos.y;
      bill._43=teile[i].vPos.z;       
      

      device->SetTransform( D3DTS_WORLD, &bill );

        // Render the billboard
        device->DrawPrimitive( D3DPT_TRIANGLESTRIP, teile[i].dwOffset, 2 );
   
    }

    // Restore state
    device->SetRenderState( D3DRS_ALPHABLENDENABLE,   FALSE );


Das ist mein rendercode...der funzt aber net, ich seh nix...
_________________
-->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 15:02    Titel: Antworten mit Zitat

Hm, da kann ich jetzt spontan keinen Fehler erkennen. Evtl. funktioniert das Holen der View-Matrix nicht. Setz am besten mal nen Breakpoint nach device->GetTransform() und schau nach, ob in matView was gescheites drin steht.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 16:02    Titel: Antworten mit Zitat

also ob da was gescheites drinsteht weiss ich nicht, ich weiss nur das die matView bei _11 _12 usw. halt überall den Wert -1.0737e+008 hat. Steht wahrscheinlich für 0 oder nicht? also liegts daran?
_________________
-->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 11.06.2003, 16:12    Titel: Antworten mit Zitat

Wenn das so ist, dann benutz einfach die View-Matrix, die du vorher als View-Matrix gesetzt hast.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 12.06.2003, 10:30    Titel: Antworten mit Zitat

sodala jetzt funktioniert schon alles bei meinem BillboardPartikelsystem, naja, alles bis auf so eine drecks Kleinigkeit.
Code:

      teile[i].v[1].p = D3DXVECTOR3(position.x-ibb, position.y+ihh, position.z);
      teile[i].v[2].p = D3DXVECTOR3(position.x+ibb, position.y-ihh, position.z);
      teile[i].v[3].p = D3DXVECTOR3(position.x+ibb, position.y+ihh, position.z);   
usw.


Das ist der Code mit dem ich die Eckpunkte meines Partikels angebe. doch irgendwie nimmt er da keine Werte an...wenn ich Debugge steht das da:

-teile[i].v[0].p
- _D3DVECTOR
----x | CXX0030: Error: expression cannot be evaluated

und das steht bei x y und z.

was muss ich machen, damit da was gescheites rauskommt.

wenn ich diesen Code benutze:
Code:

teile[i].v[0].p = D3DXVECTOR3(-10, -10, 0);
teile[i].v[1].p = D3DXVECTOR3(-10, 10, 0);
teile[i].v[2].p = D3DXVECTOR3( 10,-10, 0);
teile[i].v[3].p = D3DXVECTOR3(10,10, 0);

funktioniert alles wunderbar, aber es hilft mir nicht weiter, weil die Position ja veränderlich sein muss...
_________________
-->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig!


Zuletzt bearbeitet von Claudio am 12.06.2003, 10:32, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL 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