![JLI Spieleprogrammierung Foren-Übersicht](templates/subSilver/images/jlilogo.jpg) |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 09.06.2003, 20:11 Titel: Problem mit Partikeln! Brauch dringen Hilfe! |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Jörg JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://mitglied.tripod.de/messiahzone/jesus/kiste.gif)
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 09.06.2003, 20:16 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 10.06.2003, 15:30 Titel: |
|
|
ok, danke..also muss ich wohl billboard machen..wenn ich damit Probleme hab, post ichs nochmal
hat jemand gute Tutorials |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 10.06.2003, 15:51 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
The Lord of Programming Living Legend
![](http://extern.visualgamesentertainment.net/ava_vge.png)
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.06.2003, 15:57 Titel: |
|
|
Ich denke mal, das funktioniert gleich
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 |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 10.06.2003, 20:01 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
The Lord of Programming Living Legend
![](http://extern.visualgamesentertainment.net/ava_vge.png)
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.06.2003, 11:07 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Jörg JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://mitglied.tripod.de/messiahzone/jesus/kiste.gif)
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 11:41 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 11.06.2003, 12:36 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Jörg JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://mitglied.tripod.de/messiahzone/jesus/kiste.gif)
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 13:41 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 11.06.2003, 13:53 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Jörg JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://mitglied.tripod.de/messiahzone/jesus/kiste.gif)
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 14:02 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 11.06.2003, 15:02 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Jörg JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://mitglied.tripod.de/messiahzone/jesus/kiste.gif)
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 15:12 Titel: |
|
|
Wenn das so ist, dann benutz einfach die View-Matrix, die du vorher als View-Matrix gesetzt hast. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Claudio Junior JLI'ler
![](http://laynethelegend.com/images/Rockon.gif)
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 12.06.2003, 09:30 Titel: |
|
|
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, 09:32, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|