Echtzeitreflektionen am Boden

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
mcq
Beiträge: 8
Registriert: 13.06.2007, 18:43

Echtzeitreflektionen am Boden

Beitrag von mcq »

Hallo allerseits!

Stehe nun vor dem Problem, dass ich gerne Echtzeitreflektionen am Boden erzeugen möchte (ohne Shader, weil ich davon bisher nicht den Hauch einer Ahnung hab - aber das ist ein anderes Kapitel).

Eigentlich wollte ich es so machen, dass ich die Szene von dem Punkt aus, der der Kamera gegenüber der Reflexionsebene (dem Boden) gegenüber liegt (also 6 feet under... ;) ) die Szene in eine Textur rendere und diese wiederum mit dem Bodenobjekt verwende. Bloß leider gelingt es mir nicht, die passenden Einstellungen für die Textur zu finden...! Ich hab auch schon im Forum gesucht, aber leider nichts gefunden...

Soweit ich das verstanden habe, gibt es zwei Möglichkeiten:
a) ich verwende D3DTSS_TCI_SPHEREMAP - hierfür allerdings braucht man eine spherische Textur, die man ohne weiteres nicht rendern kann (oder?)
b) ich verwende D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR - hierfür aber braucht man eine Cube-Textur mit sechs Seiten. Das hab ich zwar noch nicht getestet, aber es entspricht ja auch mehr der Wiedergabe der Reflexionen an einer bestimmten Position, also da, wo das Objekt sich befindet.
Ich möchte ja eigentlich mathematisch gesehen eine Reflexion an einer Ebene!

Habe ich jetzt noch nicht richtig verstanden, wie man eine "richtige" Reflexion an einer Ebene rendern kann! Kann mir da jemand einen Fingerzeig geben? Oder geht es doch (mal wieder ;) ) nur mit Shadern?
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Echtzeitreflektionen am Boden

Beitrag von Zudomon »

Hey!
Nope, brauchst keine Shader dafür...
Wenn es planare Reflektionen wie etwa aus Unreal1 sein sollen, geht das ganz einfach.
Zuerst einmal die Reflektion rendern. Plane erstellen und daraus über D3DXMatrixReflect eine Reflektionsmatrix erstellen.
Kameraposition mit der neuen Matrix transformieren über D3DXVec3TransformCoord. Da die Welt nun gespiegelt dargestellt wird, musst du noch die Dreiecke flippen, also statt CCW nun CW und umgekehrt.
Damit da keine Artefakte entstehen, solltest auch noch eine Clippingebene einbinden, die dann da ansetzt, wo deine Spiegelebene liegt.
Danach einfach normal die Szene rendern und natürlich da frei lassen, wo die Reflektion sein soll... kannst auch noch schön mit Alpha an der Stelle ne andere Textur drüberblenden, so dass der Boden nur teilweise spiegelt.

Have fun! :D
Zudo
mcq
Beiträge: 8
Registriert: 13.06.2007, 18:43

Re: Echtzeitreflektionen am Boden

Beitrag von mcq »

Vielen Dank!

Das ist natürlich auch eine elegante Möglichkeit - aber soweit ich das sehe, gibt es hier das Problem, dass keine Bump-Maps möglich sind. Ich habe vor allem an Reflexionseffekte gedacht wie beim FlightSimulator X im Wasser: http://www.forum.aerosoft.com/index.php ... ch_id=6568 (wobei die höchstwahrscheinlich Shader verwenden).

Naja, ich probier nochmal ein bisschen, mal sehen, welche Lösung nachher das Rennen macht! ;)
Benutzeravatar
Schrompf
Moderator
Beiträge: 4858
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Echtzeitreflektionen am Boden

Beitrag von Schrompf »

Japp, die brauchen Shader. Der Trick dabei ist, die Spiegelung in eine Textur zu rendern, wie Du das bereits beschrieben hast, und dann je nach Normale aus der Normal Map mit einem Offset aus der Spiegeltextur zu lesen. Und für das Offset brauchst Du Shader.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Echtzeitreflektionen am Boden

Beitrag von Krishty »

Solange es auf Hardware laufen soll, die nach 2002 produziert wurde, solltest du eh Shader benutzen. Alles was du mit der Fixed-Function-Pipeline lernst ist verschwendete Zeit.

Übrigens heißt es „Reflexion“ ;)

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
mcq
Beiträge: 8
Registriert: 13.06.2007, 18:43

Re: Echtzeitreflektionen am Boden

Beitrag von mcq »

Ja, vielen Dank! Mein Problem ist halt, dass ich einfach bei Shadern noch gar keinen Einstieg gefunden habe - es ist zwar durchaus so, dass ich bisher noch alles irgendwann verstanden hab, aber es braucht halt etwas Zeit. Werd mir bei Gelegenheit mal Literatur besorgen...
Antworten