|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
stroggi Mini JLI'ler
Alter: 38 Anmeldedatum: 28.08.2003 Beiträge: 27 Wohnort: Gernsheim Medaillen: Keine
|
Verfasst am: 05.04.2005, 21:42 Titel: Probleme mit Pointsprites |
|
|
Da mein editor jetzt ja relativ gut funktioniert, habe ich beschlossen mich wichtigeren Dingen, wie z.B. einem Partikelsystem zu beschäftigen. Allerdings scheint dieses nicht immer so zu wollen, wie ich es will.
Für die partikel benutze ich Pointsprites, wie sie ja von DirectX9 unterstützt werden. Hier der Codeausschnitt vom Rendern der Partikel:
Code: | pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE,false);
pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
pD3DDevice->SetRenderState(D3DRS_POINTSPRITEENABLE,true);
pD3DDevice->SetRenderState(D3DRS_POINTSCALEENABLE,true);
pD3DDevice->SetRenderState(D3DRS_POINTSIZE,FtoDW(1.0f));
pD3DDevice->SetRenderState(D3DRS_POINTSIZE_MIN,FtoDW(1.0f));
pD3DDevice->SetRenderState(D3DRS_POINTSCALE_A,FtoDW(0.0f));
pD3DDevice->SetRenderState(D3DRS_POINTSCALE_B,FtoDW(0.0f));
pD3DDevice->SetRenderState(D3DRS_POINTSCALE_C,FtoDW(1.0f));
pD3DDevice->SetFVF(PartikelFVF);
pD3DDevice->SetTexture(0,lpTexture);
for(unsigned int i=0;i<MAX_PARTICEL;i++)
{
// Partikel bewegen
if(Partikel[i].bEnabled)
{
MovePartikel(i,uiTime);
}
if(Partikel[i].bEnabled)
{
// rendern
sPartikelVertex *pPointVertex;
pVertexBuffer->Lock(0,sizeof(sPartikelVertex),(void**)&pPointVertex,D3DLOCK_DISCARD);
pPointVertex->vPos = Partikel[i].Data.vPartikelPosition;
pPointVertex->dwColor = D3DXCOLOR(Partikel[i].Data.vColor);
pPointVertex++;
pVertexBuffer->Unlock();
pD3DDevice->SetStreamSource(0,pVertexBuffer,0,sizeof(sPartikelVertex));
pD3DDevice->DrawPrimitive(D3DPT_POINTLIST,0,1);
}
}
pD3DDevice->SetRenderState( D3DRS_POINTSPRITEENABLE,false);
pD3DDevice->SetRenderState( D3DRS_POINTSCALEENABLE,false);
pD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE,true);
pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,false);
pD3DDevice->SetSamplerState(i,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
|
Hier jetzt mein Problem:
Wenn ich NUR die Partikel rendere, dann sieht alles perfekt aus. lasse ich allerdings vorher die Map rendern, sieht es garnicht so toll aus:
Es scheint fast so, alls würden die Partikel auf die hinteren Objekte draufgerendert werden.
Kann mir einer bei diesem Problem helfen? Hab schon die unmöglichsten Sachen ausprobiert.
*heul* _________________ MfG Michi
http://www.roboter-projekte.de |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.04.2005, 21:48 Titel: |
|
|
Hui 15-21 Frames, da musste was optimieren. Projezierst du da was? Ich bin der Meinung das das evtl nen ZBuffer fehler sein könnte, nur deaktivierst du den ja, mhhh was setzte denn noch so alles an States ? _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
stroggi Mini JLI'ler
Alter: 38 Anmeldedatum: 28.08.2003 Beiträge: 27 Wohnort: Gernsheim Medaillen: Keine
|
Verfasst am: 06.04.2005, 09:05 Titel: |
|
|
Also das mit den 15-21 Frames ist kein reeler Wert, da im Hintergrund noch ein paar andere Programme gelaufen sind. Außerdem hab ich mit der Partikelanzahl etwas übertrieben (1000000 oder so).
Der Z-Buffer wird nicht getezt, da das nur Probleme mit dem AlphaBlending geben würde, aber projezieren tue ich eigentlich nicht (zumindest weis ich nichts davon).
Beim schreiben des Partikelsystems habe ich mich relativ eng an einem Beispiel von CodeSampler.com gehalten (PointSprites und Particle System (Using Point Sprites)) und da scheint es ja wohl auch ohne Probleme zu funktionieren. _________________ MfG Michi
http://www.roboter-projekte.de |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 06.04.2005, 13:40 Titel: |
|
|
1000000? Mit Locken des Vertexbuffers?
Du könntest mal zeigen wie es ohne die Map aussieht.
Hmm probier mal das blending mit SRC / INVSRC und -dest.
Mit dem z-Buffer: Sortier sie halt der Entfernung nach, ist doch kein so großes Problem.
Was ich komisch finde sind die scheinbar ausgefransten Ränder in der Ecke des Raumes(da sehen die Partikel irgendwie zerrissen aus). _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
stroggi Mini JLI'ler
Alter: 38 Anmeldedatum: 28.08.2003 Beiträge: 27 Wohnort: Gernsheim Medaillen: Keine
|
Verfasst am: 06.04.2005, 14:11 Titel: |
|
|
Also den Fehler konnte ich jetzt aus irgend einem Grund beheben.
Ich hatte nach dem Erstellen der Device-Schnittstelle den ZBuffer mit dem Parameter D3DZB_USEW aktiviert. Jetzt habe ich ihn mit dem Parameter D3DZB_TRUE aktiviert und sihe da, das Problem ist verschwunden!!!
Aber wieso????????? Ich deaktiviere ihn ja schließlich für das Rendern der Partikel. Er wird ist nur beim Rendern der Map aktiv.
Hier noch ein Bild, wie es jetzt aussieht mit drei Partikeleffekten, mit je 100 Partikeln:
ICH HASSE SOLCHE FEHLER/PROBLEME _________________ MfG Michi
http://www.roboter-projekte.de |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 06.04.2005, 14:16 Titel: |
|
|
Das sind aber vier _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
stroggi Mini JLI'ler
Alter: 38 Anmeldedatum: 28.08.2003 Beiträge: 27 Wohnort: Gernsheim Medaillen: Keine
|
|
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
|