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

Aktuelle Zeit: Do Jul 10, 2025 13:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Sphere-Mapping in GLSL
BeitragVerfasst: Sa Mai 05, 2007 15:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,
ich frage mich, wie ich in GLSL das Sphere-Mapping der festen Pipeline nachbauen könnte.
Ich habe schon ein bisschen rumprobiert es hat allerdings nicht wirklich geklappt.
Es würde mir schon sehr helfen wenn ich wüsste wie ich die entsprechenden
Texturcoordinaten der Sphere Map berechnen kann, oder zumindest die Idee dahinter verstehe.

Vielen Dank für eure Antworten (die hoffentlich kommen :wink:),
MatReno

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 05, 2007 22:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ist das jetzt eine Shaderfrage oder eine Frage zum Kugelmapping? Denn bei Shadern kenne ich mich nicht aus. Dafür habe ich hier einen 1A Link für Dich, was das Verständnis für Kugelmapping anlangt. Es handelt sich um Kartenprojektionen. Nicht erschrecken - runterblättern bis zur Überschrift "Zylindrische Projektionen" und dort das Bild mit der Unterschrift "Entstehung der Mercatorkarte" ansehen: http://www.kowoma.de/gps/geo/Projektionen.htm Der übrige Inhalt der Website ist aber auch ziemlich interessant für Leute, die sich mit dem Erstellen von Texturkoordinaten beschäftigen.
Traude

EDIT: offensichtlich hab ich Dich missverstanden. Denn ich hab in einer anderen Website (http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node176.html) die Erklärung gefunden:

Zitat:
OpenGL has built in support for an environment mapping parameterization know as sphere mapping. Sphere mapping is a type of environment mapping in which the irradiance image is equivalent to that which would be seen in a perfectly reflective hemisphere when viewed using an orthographic projection.


Wie man eine orthographische Projektion einer Kugeloberfläche anfertigt, ist in der ersten angeführten Website prinzipiell auch zu sehen (nur vom Verständnis her, Formeln sind keine enthalten): siehe dort unter "Planare oder azimutale Projektionen".




Ha, ich habe noch etwas gefunden: http://www.bluevoid.com/opengl/sig00/advanced00/notes/node184.html betitelt "The Mathematics of Sphere Mapping" und bezieht sich auf OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 06, 2007 11:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hey thanks,
hat mir schon mal weitergeholfen. Mal sehen, ob ich mit der Berechnung die da angegeben ist auch zu einem Ergebnis komme.
Ich hatte nämlich schon vorher eine Berechnung zu den koordinaten gesehen, die aber nicht funktioniert hat.
Diese sieht schon mal anders aus!
Werde mich nochmal melden, falls was bei heraus kommt, und wenn nicht auch ;)

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 08, 2007 15:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
So, da bin ich wieder ;)
Ich habe jetzt einen einigermaßen stimmig aussehenden Shader gebastelt.
Wenn ich das Objekt drehe (rechte Maustaste + drag) scheint es zu stimmen.
Am besten zu sehen ist es auf der Kugel (mit Space Objekte durchschalten)!
Dreht die Objekte einfach mal alle, denn für mich sieht das so aus, als ob es stimmt, oder?

Wenn man sich jetzt allerdings mit der Camera bewegt stimmt das ganze nicht mehr (linke Maustaste + drag + WASD) :(
Zur Veranschaulichung habe ich das Beispielprogramm mal hier: http://texelviews.delphigl.com/downloads/SphereMapping.zip hochgeladen.

Zu test-zwecken habe ich eine Spheremap benutzt, die relativ einfach nachvollziehbar ist. (FR.bmp)
Ich hoffe ihr könnt mir helfen.

PS: Was ganz wichtig ist für die, die sich den Shader anschauen: Meine Camera wird in der Projection-Matrix gesetzt!!

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 11, 2007 09:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Der Shader funktioniert nun :D
Aber eine Frage bleibt noch offen:
Momentan setze ich die Kamera in der ModelviewMatrix, möchte sie aber gern in
die ProjektionsMatrix packen.
Jedoch wenn ich das tue funktioniert das Spheremapping nur,
wenn ich die Kamera auf <0, 0, z> stehen lasse (ViewVector: <0, 0, -1>).
Sobald ich die kamera bewege, stimmen offensichtlich die Berechnungen nicht mehr :(

Was müsste ich im Shader ändern, damit die Camera auch in der ProjektionsMatrix
stehen kann?

Hier der aktuelle VertexShader (funzt mit Kamera in der ModelviewMatrix):
Code:
  1. uniform vec3 uEyePos;
  2.  
  3. void main(void)
  4. {
  5.   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  6.  
  7.   // Position des Vertex'
  8.   vec3 v = normalize(vec3(gl_ModelViewMatrix * gl_Vertex));
  9.  
  10.   // Normale des Vertex'
  11.   vec3 n = normalize(gl_NormalMatrix * gl_Normal);
  12.  
  13.   // Vector von der Camera zum Vertex
  14.   vec3 view = normalize(v - uEyePos);
  15.  
  16.   vec3 r = reflect(v, n);
  17.  
  18.   float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + (r.z+1.0)*(r.z+1.0) );
  19.   gl_TexCoord[0].s = r.x/m + 0.5;
  20.   gl_TexCoord[0].t = r.y/m + 0.5;
  21. }


Im Fragment Shader wird nur gl_FragColor mit Hilfe der berechneten TexturKoordinaten gesetzt.
Bitte um Hilfe :)

PS: Der oben angegebene Link funktioniert nicht mehr.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 11, 2007 15:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
MatReno hat geschrieben:
Code:
  1.  
  2.   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  3.  
  4.   // Position des Vertex'
  5.   vec3 v = normalize(vec3(gl_ModelViewMatrix * gl_Vertex));
  6.  


Schon mal bei v auch gl_ModelViewProjectionMatrix probiert?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 12, 2007 09:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Danke für deine Antwort!
Leider hab ich das schon mal probiert... Das Ergebnis hatte sich verschlechtert, d.h. es war kein Ansatz von SphereMapping mehr zu erkennen.
Ich schätze, dass man noch irgendwas mit den Normalen machen muss... Denn die gl_NormalMatrix ist ja die Inverse der 3er gl_ModelViewMatrix und nicht die der gl_ModelViewProjectionMatrix.

Vielleicht muss ich ja nur irgendwie die berechneten Normalen (n) verändern, die Kamera-Position hab ich ja und auch den View-Vektor, diese beiden resultieren ja quasi aus der Projektions-Matrix...
Leider weiß ich nicht wo ich was ändern muss, und stupide rumprobieren hat auch nix gebracht :(
Ich bin für jeden Tipp/Idee sehr dankbar!

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 12, 2007 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Eben nachgeschaut, scheint zu stimmen: gl_NormalMatrix ist die transponierte und inverse Bearbeitung der linken oberen mat3 von gl_ModelViewMatrix. Nach den GLSL-Doks zu urteilen, müsstest du mal statt
Code:
  1. gl_NormalMatrix
Code:
  1. mat3(gl_ModelViewProjectionMatrixInverseTranspose)
probieren.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 13, 2007 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Ich hab es mal probiert und auch sämtliche Kombinationen die mir eingefallen sind.
Es will einfach nicht funktionieren :x
So langsam frage ich mich, ob das überhaupt möglich ist...
Trotzdem Danke für deine Tipps!
Wäre es hilfreich, wenn ich das Beispielprogramm noch mal hochladen würde? Dann könntest du / ihr mal versuchen den
VertexShader zu verändern.
Außerdem könnte ich noch das Programm hochladen, wo die Kamera in der ModelviewMatrix steckt. Quasi als funktionierende Referenz.

_________________
http://texelviews.delphigl.com


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]