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

Aktuelle Zeit: Do Mär 28, 2024 15:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 43 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 00:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wieso ist dies nur bei Position der Fall und bei Normal nicht ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 07:09 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Bei der Normalen interessiert nur die Rotation, die Translation in der 4. Spalte der Matrix wird nicht gebraucht. Deshalb wird mit mat3(xxx) der Rotationsteil 'herausgeschnitten' und auf die Normale angewendet.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 18:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Mein nächstes Problem, die Seiten des Würfels, welche eigentlich im Schatten sein müssten wird voll angeleuchtet. Ich dachte ich könnte diese Problem mit folgenden Befehlen lösen. Die Rückseite der Dreiecke wird nicht mehr gezeichnet, dies ist richtig, aber auf die Farbe hat es leider keine Einfluss.
Code:
  1.   glEnable(GL_CULL_FACE);
  2.   glCullface(GL_BACK);    

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 18:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Dann zeigen die Normalen wahrscheinlich genau in die falsche Richtung. Also statt von ihr weg, zeigen sie zu der Lichtquelle hin. Wenn das Backface-Culling korrekt funktioniert, ist das schonmal gut. Vertausche mal bei der Berechnung der Normalen die Parameter des Kreuzproduktes bzw. negiere die Normalen.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 19:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Meinst du die Vorzeichen bei der Normalen vertauschen ?
Etwa so: Vector[i] := Vector[i] * -1;

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Genau.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 22:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Woher kommt der helle Fleck oben auf dem Linken Würfel ?
Das Licht währe mit 10.0 ziemlich weit weg.

Folgende Werte habe ich im FragmentShader eingesetzt:
Code:
  1. float AmbientStrength = 0.3;
  2. float DiffuseStrength = 0.0;
  3. float SpecularStrength = 0.7;
  4. float Shininess = 0.8;
  5. vec3 LightPosition = vec3(10.0, 0.0, 0.0);  


Dateianhänge:
Zwischenablage-1.jpg
Zwischenablage-1.jpg [ 7.43 KiB | 11371-mal betrachtet ]

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mi Dez 18, 2013 23:06 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Da
Zitat:
vec3 LightDirection = normalize(Position - LightPosition);

normalisiert wird, bringt es IMHO nichts das Licht weiter weg zu setzen. Deswegen heisst die Variable wohl auch LightDirection. :)

Poste uns doch mal die Werte, die du aktuell in deinen Vertex und Normal Arrays hast.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Do Dez 19, 2013 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Hier meine Daten des Würfels. Wen ich es richtig verstehe müssten diese richtig sein.
Code:
  1. Vectoren:
  2. x: -0,20  y: -0,20  z: -0,20       x: -0,20  y: -0,20  z:  0,20       x: -0,20  y:  0,20  z:  0,20  
  3. Normale:
  4. x: -1,00  y:  0,00  z:  0,00       x: -1,00  y:  0,00  z:  0,00       x: -1,00  y:  0,00  z:  0,00  
  5.  
  6. Vectoren:
  7. x:  0,20  y:  0,20  z: -0,20       x: -0,20  y: -0,20  z: -0,20       x: -0,20  y:  0,20  z: -0,20  
  8. Normale:
  9. x: -0,00  y:  0,00  z: -1,00       x: -0,00  y:  0,00  z: -1,00       x: -0,00  y:  0,00  z: -1,00  
  10.  
  11. Vectoren:
  12. x:  0,20  y: -0,20  z:  0,20       x: -0,20  y: -0,20  z: -0,20       x:  0,20  y: -0,20  z: -0,20  
  13. Normale:
  14. x:  0,00  y: -1,00  z: -0,00       x:  0,00  y: -1,00  z: -0,00       x:  0,00  y: -1,00  z: -0,00  
  15.  
  16. Vectoren:
  17. x:  0,20  y:  0,20  z: -0,20       x:  0,20  y: -0,20  z: -0,20       x: -0,20  y: -0,20  z: -0,20  
  18. Normale:
  19. x:  0,00  y: -0,00  z: -1,00       x:  0,00  y: -0,00  z: -1,00       x:  0,00  y: -0,00  z: -1,00  
  20.  
  21. Vectoren:
  22. x: -0,20  y: -0,20  z: -0,20       x: -0,20  y:  0,20  z:  0,20       x: -0,20  y:  0,20  z: -0,20  
  23. Normale:
  24. x: -1,00  y:  0,00  z:  0,00       x: -1,00  y:  0,00  z:  0,00       x: -1,00  y:  0,00  z:  0,00  
  25.  
  26. Vectoren:
  27. x:  0,20  y: -0,20  z:  0,20       x: -0,20  y: -0,20  z:  0,20       x: -0,20  y: -0,20  z: -0,20  
  28. Normale:
  29. x: -0,00  y: -1,00  z:  0,00       x: -0,00  y: -1,00  z:  0,00       x: -0,00  y: -1,00  z:  0,00  
  30.  
  31. Vectoren:
  32. x: -0,20  y:  0,20  z:  0,20       x: -0,20  y: -0,20  z:  0,20       x:  0,20  y: -0,20  z:  0,20  
  33. Normale:
  34. x:  0,00  y:  0,00  z:  1,00       x:  0,00  y:  0,00  z:  1,00       x:  0,00  y:  0,00  z:  1,00  
  35.  
  36. Vectoren:
  37. x:  0,20  y:  0,20  z:  0,20       x:  0,20  y: -0,20  z: -0,20       x:  0,20  y:  0,20  z: -0,20  
  38. Normale:
  39. x:  1,00  y:  0,00  z:  0,00       x:  1,00  y:  0,00  z:  0,00       x:  1,00  y:  0,00  z:  0,00  
  40.  
  41. Vectoren:
  42. x:  0,20  y: -0,20  z: -0,20       x:  0,20  y:  0,20  z:  0,20       x:  0,20  y: -0,20  z:  0,20  
  43. Normale:
  44. x:  1,00  y:  0,00  z:  0,00       x:  1,00  y:  0,00  z:  0,00       x:  1,00  y:  0,00  z:  0,00  
  45.  
  46. Vectoren:
  47. x:  0,20  y:  0,20  z:  0,20       x:  0,20  y:  0,20  z: -0,20       x: -0,20  y:  0,20  z: -0,20  
  48. Normale:
  49. x:  0,00  y:  1,00  z:  0,00       x:  0,00  y:  1,00  z:  0,00       x:  0,00  y:  1,00  z:  0,00  
  50.  
  51. Vectoren:
  52. x:  0,20  y:  0,20  z:  0,20       x: -0,20  y:  0,20  z: -0,20       x: -0,20  y:  0,20  z:  0,20  
  53. Normale:
  54. x:  0,00  y:  1,00  z:  0,00       x:  0,00  y:  1,00  z:  0,00       x:  0,00  y:  1,00  z:  0,00  
  55.  
  56. Vectoren:
  57. x:  0,20  y:  0,20  z:  0,20       x: -0,20  y:  0,20  z:  0,20       x:  0,20  y: -0,20  z:  0,20  
  58. Normale:
  59. x:  0,00  y:  0,00  z:  1,00       x:  0,00  y:  0,00  z:  1,00       x:  0,00  y:  0,00  z:  1,00  
  60.  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Do Dez 19, 2013 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Die Vertexdaten sehen gut aus.

Was mir allerdings gerade aufgefallen ist: Hiermit
Code:
  1. vec3 LightPosition = vec3(10.0, 0.0, 0.0);
setzt du die Lichtquelle nach rechts (es sei denn, deine Projektionsmatrix ist irgendwie invertiert). Auf dem Bild sieht es aber so aus, als würde das Licht von links scheinen. Da deine Normalen aber offenbar korrekt sind, setze mal hier ein Minus vor das dot():
Code:
  1. float DiffusePart = max(dot(NormalizedNormal, LightDirection), 0.0);

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Do Dez 19, 2013 22:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Code:
  1. float DiffusePart = max(-dot(NormalizedNormal, LightDirection), 0.0);

Linker Würfel. Der Umfang bleibt gleich, nur die Seiten Links und Rechts verändern sich.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Mo Dez 23, 2013 21:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Mit dem Licht klappt es jetzt. :D

Code:
  1. #version 330
  2.  
  3. in vec3 Pos;
  4. in vec4 Color;
  5. in vec3 Normal;
  6.  
  7. out vec4 FragColor;
  8.  
  9. vec3 LightPosition = vec3(-2.0, 2.0, 0.0);
  10. float UmgebungsLicht = 0.1;
  11.  
  12. void main() {
  13.   LightPosition = (LightPosition * -1.0) - Pos;
  14.   float distance = length(LightPosition);
  15.   float diffuse = max(dot(Normal, LightPosition), UmgebungsLicht);
  16.   diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
  17.   gl_FragColor = Color * diffuse;
  18. }

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieso funktioniert dies ?
BeitragVerfasst: Di Okt 07, 2014 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich habe die Ursache des Problemes im 1. Posting raus gefunden.

Der Auslöser war dieses Tutorial, dort werden Werte im Shader festgelegt.

Code:
  1. layout (location = 0) in vec3 inPosition;
  2. layout (location = 1) in vec3 inColor;


Den Pascal-Code, habe ich anhand des C-Code dieses Tutorial geschrieben.

Den Shader habe ich aus dem Forum genommen viewtopic.php?f=10&t=11037&start=15 5. Post auf der 2. Seite.

Man lernt immer mehr dazu. ;)

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 43 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.064s | 19 Queries | GZIP : On ]