Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 10.05.2005, 23:21 Titel: Gasringproblem mit Alphakanal |
|
|
Ich versuche ein Planeten mit einem Gasring zu rendern. Technisch betrachtet benutze ich eine Kugel für den Planeten, eine transparente Kugel für die Atmosphäre und eine Ringfläche (wie eine CD, nur etwas schmaler). Alle 3 Komponenten haben logischerweise die gleiche Translationsmatrix.
Bei transparenten Objekten muss man sie vorher in die richtige Reihenfolge bringen. Problem: Ein Gasring umgibt einen Planeten, so dass ein Teil vor dem Planeten zu sehen und ein Teil hinter dem Planeten (auch durch die transparente Atmosphäre) sein soll. Leider siehts anders aus. Je nach Renderreihenfolge, wird entweder ein Teil des Planeten verdeckt oder ein Teil des Gasringes durch den Planeten mit Atmosphäre verdeckt (obwohl die Atmosphäre ja nix verdecken darf).
Wie muss man da vorgehen? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 10.05.2005, 23:31 Titel: |
|
|
Wie blendest du Atmo und Ring?
Ansonsten:
Planet: ZWrite aktiv
Ring: ZWrite deaktiv
Atmo: ZWrite deaktiv
Renderreihenfolge:
Planet->Atmo->Ring _________________ "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 |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.05.2005, 00:08 Titel: |
|
|
Also das mit den Z-Buffern an und ausschalten halte ich für keine gute Idee. Da wirds noch mehr Grafikfehler geben, wenn noch andere Objekte im Raum rum schwirren.
Man muss Clippingplanes mit "D3DXPLANE" berechnen. Frag mich aber nicht wie. Bisher hab ich da noch Darstellungsfehler. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.05.2005, 08:26 Titel: |
|
|
es wird nciht der Zbuffer ausgeschaltet. Es wird immer noch alles mit dem zBuffer getestet, aber der zbuffer wird nicht verändert. Das kann man seperat einstellen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.05.2005, 09:51 Titel: |
|
|
Wenn man die Z-Buffer vom Ring manipuliert, hat man trotzdem noch ein Problem. Denn entweder wird der Ring vor dem Planeten oder hinter dem Planeten gerendert und nicht teils teils. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.05.2005, 10:04 Titel: |
|
|
Vielleicht kommt jemandem dieses Verfahren bekannt vor, wenn ich etwas Quellcode poste:
Deklaration:
CPP: | D3DXPLANE FrontSideClippingPlane;
D3DXPLANE BackSideClippingPlane;
D3DXMATRIX InvViewProjectionMatrix;
D3DXMATRIX InvTransposedViewProjectionMatrix;
//Environment.RotationVektorZ: Z-Rotationsachse der Kamera
//Environment.m_Position: Position der Kamera
|
Berechnung der Clippingplanes:
CPP: | // Matrix für die Berechnung der Clipping Planes:
D3DXMatrixInverse(&InvViewProjectionMatrix, NULL, &(Environment.m_ViewMatrix*Environment.m_ProjMatrix));
D3DXMatrixTranspose(&InvTransposedViewProjectionMatrix, &InvViewProjectionMatrix);
// Berechnung zweier Clipping Planes, die für die Darstellung der
// Planetenringe benötigt werden:
D3DXVECTOR3 tempVektor3 = -Environment.RotationVektorZ;
D3DXPlaneFromPointNormal(&BackSideClippingPlane, &Environment.m_Position, &tempVektor3);
// Transformation der Clipping Plane in den Projektionsraum:
D3DXPlaneTransform(&BackSideClippingPlane, &BackSideClippingPlane, &InvTransposedViewProjectionMatrix);
D3DXPlaneFromPointNormal(&FrontSideClippingPlane, &Environment.m_Position, &Environment.RotationVektorZ);
// Transformation der Clipping Plane in den Projektionsraum:
D3DXPlaneTransform(&FrontSideClippingPlane, &FrontSideClippingPlane, &InvTransposedViewProjectionMatrix);
|
Rendern des Planeten mit Gasring:
CPP: | //m_lpDevice: Device von Direct3D
// Clipping Plane setzen:
m_lpDevice->SetClipPlane(0, FrontSideClippingPlane);
m_lpDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, D3DCLIPPLANE0 );
RenderRing();
m_lpDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, FALSE );
...
//Rendern der Planetenoberfläche und -Atmosphäre
...
// Clipping Plane setzen:
m_lpDevice->SetClipPlane(0, BackSideClippingPlane);
m_lpDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, D3DCLIPPLANE0 );
//RenderRing();
m_lpDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, FALSE );
|
So ganz schlüssig bin ich mir nicht, welchen Vektor oder welche Matrix ich falsch angegeben hab. Könnte sein, dass anstatt der Position der Kamera auch die Position des Planeten angegeben werden soll. Aber das klappte auch nicht. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.05.2005, 14:58 Titel: |
|
|
Das bringt mir dann nicht viel. Ich wollte schon was für Directx haben. Und für dieses vermeintlich kleine Problem brauch ich jetzt bestimmt nicht son Thema anzuschneiden. Es sei denn, mir kann das jemand ganz schnell beibringen. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.05.2005, 15:13 Titel: |
|
|
Momentan sieht es so aus, als wäre der Planet nur von einer Richtung korrekt gerendert worden.
So soll es nicht aussehen:
http://www.webspace-kostenlos.com/leediger/Planet.jpg
So sieht der Planet von der anderen Seite aus:
http://www.webspace-kostenlos.com/leediger/Planet2.jpg
Irgendein Parameter muss ich bei der Berechnung der Clippingplane falsch interpretiert haben.
Edit: Hab die Links angegeben. Probierts mal über Copy'n Paste. _________________ Kein Rückzug! Kein Aufgeben!
Zuletzt bearbeitet von LeeDiGer am 11.05.2005, 18:26, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 11.05.2005, 17:37 Titel: |
|
|
deadlinks :/ |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 11.05.2005, 18:15 Titel: |
|
|
Ne... Adresse nehmen und in den Browser von hand kopieren...
LeeDiGer: Du darfst nicht extern linken (sagt dein Webspace-Betreiber)... dann schmeiß uns lieber Links vor, und sag, dass du net extern linken darfst, sonst sehen wir von den Bildern nix, und xardi redet was von deadlinks...
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 12.05.2005, 11:11 Titel: |
|
|
Für diejenigen von euch, die das 3D Effektebuch von Alexander Rudolph haben:
Im 10. Kapitel wurde dieses Problem behandelt. Aber so einfach kann man die techniken nicht übernehmen, weil die ganzen Klassen zu sehr verflochten sind. Vielleicht hats ja jemand hingekriegt, einen Planeten mit Gasring mit korrekter Darstellung in seine eigene Engine zu adaptieren. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
|