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

Aktuelle Zeit: Di Mai 14, 2024 21:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gl_FragCoord -> Modelview Space
BeitragVerfasst: Sa Okt 22, 2011 12:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

für lichtberechnungen im PixelShader brauche ich die vertexPosition, bzw den eyeVector welcher sich via Varying ja einfach so berechnen lässt:

Code:
  1.     varying vec3 vertexPosition;
  2.  
  3.     void main(void) {
  4.         vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
  5.     }


aus verschiedenen Gründen ist das bei mir aber sehr unpraktisch zu machen.
Daher kam ich auf die Idee: Kann ich das ganze evtl im PixelShader irgendwie rekonstruieren? Eventuell aus gl_FragCoord?

Oder brauche ich dafür dann auch im PixelShader wieder uniforms mit informationen über die viewport höhe und breite etc?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_FragCoord -> Modelview Space
BeitragVerfasst: Sa Okt 22, 2011 13:17 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Im Prinzip suchst du ja eine Funktion wie gluUnproject für Shader. Ich habe mal kurz gegooglet, wie der Code der Funktion aussieht:
http://www.opengl.org/wiki/GluProject_and_gluUnProject_code

Dabei kannst du dir diese Codezeilen sparen, weil du ja nicht die Fensterkoordinaten, sondern schon gl_FragCoord hast:
Code:
  1. //Transformation of normalized coordinates between -1 and 1
  2. in[0]=(winx-(float)viewport[0])/(float)viewport[2]*2.0-1.0;
  3. in[1]=(winy-(float)viewport[1])/(float)viewport[3]*2.0-1.0;
  4. in[2]=2.0*winz-1.0;
  5. in[3]=1.0;

Den Viewport brauchst du also nicht als Parameter. Bleiben aber immer noch die Projektions- und Modelviewmatrizen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_FragCoord -> Modelview Space
BeitragVerfasst: So Okt 23, 2011 09:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
gl_FragCoord enthält Fensterkoordinaten. Du kommst also um ein Uniform für die Viewportgröße nicht herum. Des weiteren brauchst du natürlich die inverse Projektionsmatrix, wobei es hier ein eingebautes Uniform gibt.

Zitat:
aus verschiedenen Gründen ist das bei mir aber sehr unpraktisch zu machen.

Was versuchst du den zu machen? Warum ist ein einfaches varying unpraktisch? Der einzige Grund der mir einfällt wäre das du bereits zu viele andere varyings hast?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_FragCoord -> Modelview Space
BeitragVerfasst: So Okt 23, 2011 10:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

das ganze hat sich prinzipiell schon wieder erledigt, habe es nun doch über einen Varying gemacht :)

Der Grund warum es umständlich war, ist das ich die selben Shader/Funktionen für Forward und Deferred Shading nutze und ich dieses Varying im Deferred Modus eben einfach nicht brauche.. aber ich hab eine elegante lösung für meine Shader-ScriptSprache gefunden wie ich das Varying aus dem Forward Shader nachträglich hinzufügen kann :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_FragCoord -> Modelview Space
BeitragVerfasst: So Okt 23, 2011 20:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
GLSL unterstützt Macros wie C. Du kannst dir also leicht eine Zeile "#define USE_VERTEX_POSITION 1" vor deinen Shader hängen (glShaderSource bekommt aus diesem Grund eine Liste von Strings!) und im Shader mit #if, #else usw. entsprechend handeln.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_FragCoord -> Modelview Space
BeitragVerfasst: So Okt 23, 2011 23:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Coolcat hat geschrieben:
GLSL unterstützt Macros wie C. Du kannst dir also leicht eine Zeile "#define USE_VERTEX_POSITION 1" vor deinen Shader hängen (glShaderSource bekommt aus diesem Grund eine Liste von Strings!) und im Shader mit #if, #else usw. entsprechend handeln.

Ich weiss, sowas finde ich aber sehr unuebersichtlich, deshalb hatte ich bei mir einen anderen weg gewaehlt mit der eigenen Pseudo-ScriptSprache welche sich schoen in den GLSL Code integriert und eben von meiner Engine rausgefiltert wird.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.035s | 17 Queries | GZIP : On ]