JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Gasringproblem mit Alphakanal

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 10.05.2005, 23:21    Titel: Gasringproblem mit Alphakanal Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 10.05.2005, 23:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 00:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 08:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 09:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 10:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 11:08    Titel: Antworten mit Zitat

Vielleicht beschäftigst du dich mal mit Depth Peeling.
Diese Methode kann man zum rendern komplizierter transparente Objekte benutzen.

Bei nvidia gibt es Beispielcode dafür zum Download. Allerdings mit OpenGL.
Dieses Verfahren ist auch bekannt unter dem Namen "Interactive Order-Independent Transparency".

Hier in paar Links:
http://developer.nvidia.com/object/Interactive_Order_Transparency.html
http://developer.nvidia.com/object/order_independent_transparency.html
http://download.nvidia.com/developer/SDK/Individual_Samples/samples.html (Hier runterscrollen zum Depth Peeling Beispiel)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 14:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 15:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 17:37    Titel: Antworten mit Zitat

deadlinks :/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 11.05.2005, 18:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 11:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound Alle Zeiten sind GMT
Seite 1 von 1

 
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