Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.07.2012, 21:12

[HLSL] Clipplane im Viewspace die nur den Schneidenden viewbereich klipped?

Guten Abend allerseits,
Ich arbeite im Moment an Portaltechniken wie in Portal. Momentan bastel ich am letzten Puzzelstück für den visuellen Bereich.
Angenommen wir haben eine Oberfläche auf die wir das Portal projezieren, und wir gehen seitlich hindurch, dan wird natürlich irgendwann aufgrund der NearPlane des Views ein teil der Portaloberfläche weggeklippt und die dahinterliegende geometry kommt zum vorschein. Ich muss also irgendwie erkennen, welcher bereich der View durch die Plane durch ist und sich dahinter befindet, und welcher teil nicht, um den entsprechenden Bereich ebenfalls mit den Portaldaten zu füllen.

Dabei habe ich natürlich erstmal an eine Clipplane gedacht. Problem ist nur, dass eine Clipplane einfach alles clippt was hinter ihr ist, egal von wo man draufguckt. Die Idee war jetzt, eine Clipplane zu schreiben, die im ViewSPace berechnet wird. Für jeden Pixel hole ich mit die Weltpositionen im Viewspace, und setze dort den Z-Wert vor der Berechnung auf 0. Gedacht habe ich jetzt, dass wen alle Pixel direkt an der View liegen, nur die Pixel vom dot-produkt betroffen werden können, welche sich im Bereich hinter der Clipplane befinden(nur anhand von x/y).

Zuersteinmal habe ich eine normale Clipplane programmiert. Die Positionen der Plane sowie der pixelinformationen sind im WorldSpace. Soweit klappt das auch. Nur der sprung zu meiner Idee klappt nicht wirklich. EInfach beide informationen mit der ViewMatrix zu multiplizieren um dann das Dot produkt anzuwenden geht herzlich in die Hose.

Hätte jemand eine Idee wie/ob ich meine Idee umsetzen kann?

MFG
Memnarch
Meine Website mit Updates/News zu Aktuellen Projekten:SpareTime-Development

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

30.07.2012, 21:22

Hört sich an als ob du die Sicht durch das Portal zuerst in eine Textur renderst und die dann an die Wand projizierst, richtig?
Ich könnte mir auch einen anderen Ansatz vorstellen. Und zwar packst du die ganze Szene nochmal an die Stelle, wo das Portal ist, und zwar derart transformiert, dass das andere Portal bei (0,0,0) ist und nach (0,0,1) zeigt.
Wenn du diese Kopie der Szene renderst, kannst du dabei zusätzliche Clipping-Planes um das Portal herum platzieren, so dass nur der sichtbare Teil gerendert wird. Am Ende noch eine Alpha-Textur an die Stelle, damit das Portal nicht rechteckig aussieht.
Ich hoffe du hast verstanden, was ich meinte ;) Ist nicht so leicht zu erklären ...

3

30.07.2012, 21:40

Mh, der ansatz hört sich ganz gut an.
Allerdings arbeite ich im Gamestudio, weswegen ich beschränkten zugriff darauf habe, einzelne bestandteile der szenerie woanders hinzutransformieren.
Und wenn ich am Portal vorbeigucke, muss der normale zustand des Levels optisch ebenfalls bewahrt werden.

Im moment funktioniert es so, das für jedes Portal eine View entsprechend positioniert/transformiert wird. Dan wird mit einem Objectshader auf dem Bildschirm markiert, welcher Pixel zu welcher View gehört. Diese werden dann durch die entsprechenden Viewpixel ersetzt. Ich nutze also Viewblending(Selbe Technik wie in Portal).


(Link)


(Link)

Im zweiten Bild sieht man die überschneidung gut. Wäre dahinter eine wand, würd eich diese oder das dahinterliegende sehen. Hier würde eigentlich die Überschneidung mit meiner gedachten Clipplane stattfinden, wodurch ich den Bereich hinter dem Portal hätte markieren können. :(
Meine Website mit Updates/News zu Aktuellen Projekten:SpareTime-Development

4

05.08.2012, 22:14

Guten Abend,
Ich wollte noch mitteilen, dass sich das Problem erledigt hat.


großer dank geht an Hummel aus dem gamestudioforum. Er hat mir eine Clippingbox geschrieben. Damit ist es mir möglich einen würfel mit umgekehrten Normals zu nehmen, der alles innerhalb der box ausblendet, wen es mit der neaplane der camera intersected.

edit: video ausgetauscht, war das falsche^^"

MFG
Memnarch
Meine Website mit Updates/News zu Aktuellen Projekten:SpareTime-Development

Werbeanzeige