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

Aktuelle Zeit: Do Mär 28, 2024 19:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: SIGSEV wegen Bezeichnername
BeitragVerfasst: Mi Nov 04, 2015 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Code:
  1.   with OpenGLControl do begin
  2.     OpenGLMajorVersion := 3;
  3.     OpenGLMinorVersion := 3;  
  4.   end;


Welche Flags setzt das OpenGLControl denn? Wenn man eine feste OpenGL-Version will gibt es ja noch zusätzliche Fags. Evtl. macht das OpenGL Control schon was falsch und baut die Context-Attribute nicht korrekt.

Ich würde testweise mal keinen versionierten Context anfordern.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SIGSEV wegen Bezeichnername
BeitragVerfasst: Mi Nov 04, 2015 20:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Ich würde testweise mal keinen versionierten Context anfordern.

Ich habe 0,0 eingesetzt, das gleiche Ergebniss. Mit dem Intel-Chip hätte der Shader-Compiler mit 0,0 gemotzt.

Nochmals zum Hauptthema zurück, dieses Shader-Paar macht Probleme, die Texturen haben einen Rot stich.
Der Shader stellt Bumpmaping dar.

Vertex:
Code:
  1. #version 330
  2. layout (location = 0) in vec3 inPos;
  3. layout (location = 1) in vec3 inNormal;
  4. layout (location = 10) in vec2 inVertexUV;
  5.  
  6. out Data {
  7.   vec3 Position;
  8.   vec3 Normal;
  9.   vec2 UV;
  10. } DataOut;
  11.  
  12. uniform mat4 ObjectMatrix;
  13. uniform mat4 CameraMatrix;
  14.  
  15. void main()
  16. {
  17.   gl_Position = CameraMatrix * vec4(inPos, 1.0);
  18.   DataOut.UV = inVertexUV;
  19.   DataOut.Position = vec3(ObjectMatrix * vec4(inPos, 1.0));
  20.   DataOut.Normal =  normalize(mat3(ObjectMatrix) * inNormal);
  21. }  


Fragment:
Code:
  1. #version 330
  2. in Data {
  3.   vec3 Position;
  4.   vec3 Normal;
  5.   vec2 UV;
  6. } DataIn;
  7.  
  8. out vec4 OutColor;
  9.  
  10. uniform sampler2D myTextureSampler[4];
  11.     struct materialParams {
  12.        vec4 emission;
  13.        vec4 ambient;
  14.        vec4 diffuse;
  15.        vec4 specular;
  16.        float shininess;     // Glanz
  17.     };
  18.  
  19.     struct Lighting {
  20.       vec4 position;
  21.       vec4 ambient;    // Umgebungslicht
  22.       vec4 diffuse;    // Lichtfarbe
  23.       vec4 specular;   // Spiegelnd
  24.     };
  25.  
  26.     uniform materialParams material; // Dieser Bezeichner ist zickig. material auf nmaterial umbenannt, das Problem ist weg.
  27.                                      // glUniformLocation ist auch angepasst.
  28.     uniform Lighting LightSource;
  29.  
  30.     vec4 Light(in vec3 Normal, in vec3 Position)
  31.     {
  32.       vec3 N       = normalize(Normal);
  33.       vec4 emissiv = material.emission;
  34.       vec4 ambient = material.ambient * LightSource.ambient;
  35.       vec3 L = vec3(0.0);
  36.       vec3 H = vec3(0.0);
  37.       L            = normalize(vec3(LightSource.position) - Position);
  38.       vec4 Pos_eye = vec4(0.0, 0.0, 1.0, 0.0);
  39.       vec3 A       = Pos_eye.xyz;
  40.       H            = normalize(L + A);
  41.       vec4 diffuse       = vec4(0.0, 0.0, 0.0, 1.0);
  42.       vec4 specular      = vec4(0.0, 0.0, 0.0, 1.0);
  43.       float diffuseLight = max(dot(N, L), 0.0);
  44.       if (diffuseLight > 0.0) {
  45.         diffuse         = diffuseLight * material.diffuse * LightSource.diffuse;
  46.         float specLight = pow(max(dot(H, N), 0.0), material.shininess);
  47.         specular        = specLight * material.specular * LightSource.specular;
  48.       }
  49.       return emissiv + ambient + diffuse + specular;
  50.     }
  51.  
  52. void main() {
  53.   vec3 Normal = (texture2D(myTextureSampler[1], DataIn.UV.st).rgb * 2.0 - 1.0) + normalize(DataIn.Normal);
  54.   OutColor = (texture( myTextureSampler[0], DataIn.UV ));
  55.   float cdummy = OutColor.a;
  56.   OutColor = OutColor * Light(Normal, DataIn.Position);
  57.   OutColor.a = cdummy;
  58. }

_________________
OpenGL


Zuletzt geändert von mathias am Mi Nov 04, 2015 20:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SIGSEV wegen Bezeichnername
BeitragVerfasst: Mi Nov 04, 2015 20:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ein Fabstich lässt sich ja ganz einfach "debuggen". Einfach testweise alle an der Berechnung beteiligten Einzelkomponenten an die FragmentFarbe zuweisen und laufen lassen. Dann sieht man ja schnell wo es herkommt. Ich tippe auf einen falsch gesetzten Uniform oder einen Fehler bei der Berechnung.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SIGSEV wegen Bezeichnername
BeitragVerfasst: Do Nov 05, 2015 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
So wie es aussieht, ist das Problem mit dem Rotstich gelöst.
Im Code hat ein glUseProgram gefehlt, jetzt ist es dem Shader egal wie der Bezeichner heisst.

Ein Rätsel ist es immer noch, das es je nach Bezeichnername anders reagiert. :roll:
Der Rotstich hätte nach meiner Meinung immer kommen müssen.
Der Beleuchtung Code ist bei jedem Mash der gleiche.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.089s | 17 Queries | GZIP : On ]