Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 09:42

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Gespiegeltes Volumen
BeitragVerfasst: Mi Apr 03, 2013 21:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Halloechen allerseits,

Der 3D-Renderer in meinen Projekt (thread gibts ja hier), nutzt ein CSG System um die Szene mit ein paar coolen Effekten auszustatten. Licht
kann zum Beispiel durch die Anweisung (model << lichtposition) ganz leicht Schattenvolumen erzeugen. Nun wollte ich das Gegenstück zu diesen
Operator schreiben. Sprich aus (model >> vektor) wird das Volumen für die Reflektion. Allerdings funktioniert das nicht so ganz was ich mir ausgekaspert habe...

Schatten:
Code:
  1.  
  2. Tuple<Vector3 , float> [ ] planes = new Tuple<Vector3 , float> [ 1 ] {
  3.                             new Tuple<Vector3 , float>( -plane.Normal , -plane.Distance ) };
  4.                         for (int i = 0; i < pp.Count; i++) {
  5.                             Vector3 a = (other - pp[i]);
  6.                             Vector3 b = (other - pp[(i +1) % pp.Count]);
  7.                             a.Normalize();
  8.                             b.Normalize();
  9.                             Vector3 normb = Vector3.Cross(a,b);
  10.                             normb.Normalize();
  11.                             planes = planes.Concat( new [ ] { new Tuple<Vector3 , float>( normb , Vector3.Dot( normb ,other ) ) } ).ToArray( );
  12.                         }
  13.                         polyhedra.Add(new Polyhedron(planes));
  14.  

Reflektion:
Code:
  1.  
  2. Tuple<Vector3 , float> [ ] planes = new Tuple<Vector3 , float> [ 1 ] {
  3.                             new Tuple<Vector3 , float>( -plane.Normal , -plane.Distance * 1.0002f ) };
  4.                         for ( int i = 0 ; i < pp.Count ; i++ ) {
  5.                             Vector3 a = ( other - pp [ i ] );
  6.                             Vector3 b = ( other - pp [ ( i + 1 ) % pp.Count ] );
  7.                             a.Normalize( );
  8.                             b.Normalize( );
  9.                             float ca = -Vector3.Dot( plane.Normal , a );
  10.                             float cb = -Vector3.Dot( plane.Normal , b );
  11.                             a = -( a + ( 2 * plane.Normal * ca ) );
  12.                             b = -( b + ( 2 * plane.Normal * cb ) );
  13.                             a.Normalize( );
  14.                             b.Normalize( );
  15.                             Vector3 normb = Vector3.Cross( a , b );
  16.                             normb.Normalize( );
  17.                             planes = planes.Concat( new [ ] { new Tuple<Vector3 , float>( normb , Vector3.Dot( normb , pp[i] ) ) } ).ToArray( );
  18.                         }
  19.                         polyhedra.Add( new Polyhedron( planes ) );
  20.  


jemand ne idee wie man das besser machen könnte???

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 35 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.031s | 18 Queries | GZIP : On ]