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

Aktuelle Zeit: Do Mär 28, 2024 17:52

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Mai 09, 2019 19:03 
Offline
DGL Member

Registriert: Di Mai 09, 2017 09:27
Beiträge: 22
Wohnort: Rostock
Programmiersprache: Dart, Java, JS, TS
Moin,
ich habe folgenden Code im Fragment Shader:
...
vec3 t = normalize(vec3(u_modelInverseTranspose * vec4(tangent, 0.0)));
vec3 b = normalize(vec3(u_modelInverseTranspose * vec4(bitangent, 0.0)));
vec3 n = normalize(vec3(u_modelInverseTranspose * vec4(normal, 0.0)));

mat3 tbnMatrix = transpose(mat3(t, b, n));
...

und bekomme folgenden Fehler:
*** Error compiling shader '[object WebGLShader]':ERROR: 0:49: 'transpose' : no matching overloaded function found
ERROR: 0:49: '=' : dimension mismatch
ERROR: 0:49: 'assign' : cannot convert from 'const mediump float' to 'mediump 3X3 matrix of float'

Kann mir jemand sagen warum meine mat3 als float interpretiert wird?

Viele Grüße
Pixelschubser :?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 09, 2019 21:21 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Moin,

ich glaube WebGL hat nicht die transpose Funktion.

Zumindest hab ich durch die Spec gegreppt und es nicht gefunden:
http://www.khronos.org/registry/gles/sp ... 1.0.17.pdf

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 09, 2019 21:27 
Offline
DGL Member

Registriert: Di Mai 09, 2017 09:27
Beiträge: 22
Wohnort: Rostock
Programmiersprache: Dart, Java, JS, TS
Doch hat es ;)
Aber um auch diesen Fall auszuschließen, habe ich nochmal eine eigene transpose() Funktion geschrieben.

Wobei der gleiche Fehler auftritt.

Aber danke für die schnelle Antwort :D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 09, 2019 21:36 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Ja, du hast recht.
hast du mehr code?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 10, 2019 08:24 
Offline
DGL Member

Registriert: Di Mai 09, 2017 09:27
Beiträge: 22
Wohnort: Rostock
Programmiersprache: Dart, Java, JS, TS
Wenn es hilft, ich hab mal einen kleineren Beispiel Fragment Shader gebastelt.

Code:
  1. precision mediump float;
  2.  
  3. varying vec2 v_texcoord;
  4. varying vec3 v_normal;
  5. varying vec3 v_fragPos;
  6.  
  7. uniform sampler2D u_texture;
  8.  
  9. uniform vec3 u_lightPos;
  10. uniform vec3 u_viewPos;
  11.  
  12. void main() {
  13.     vec3 a = vec3(1.0);
  14.     vec3 b = vec3(1.0);
  15.     vec3 c = vec3(1.0);
  16.    
  17.     mat3 abc = mat3(a, b, c);
  18.     mat3 abcTranspose = transpose(abc); // error
  19.    
  20.     vec3 lightColor = vec3(1.0, 1.0, 1.0);
  21.     vec3 objectColor = texture2D(u_texture, v_texcoord).rgb;
  22.    
  23.     // * ambient
  24.     float ambientStrength = 0.1;
  25.     vec3 ambient = ambientStrength * lightColor;
  26.  
  27.     // * diffuse
  28.     vec3 normal = normalize(v_normal);
  29.     vec3 lightDir = normalize(u_lightPos - v_fragPos);
  30.    
  31.     float diff = max(dot(normal, lightDir), 0.0);
  32.     vec3 diffuse = diff * lightColor;
  33.    
  34.     // * specular
  35.     float specularStrength = 0.5;
  36.     vec3 viewDir = normalize(u_viewPos - v_fragPos);
  37.     vec3 reflectDir = reflect(-lightDir, normal);
  38.    
  39.     float shininess = 32.0;
  40.    
  41.     float spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);
  42.     vec3 specular = specularStrength * spec * lightColor;
  43.    
  44.     vec3 result = (ambient + diffuse + specular) * objectColor;
  45.     gl_FragColor = vec4(result, 1.0);
  46. }


Fehlermeldung:
*** Error compiling shader '[object WebGLShader]':ERROR: 0:18: 'transpose' : no matching overloaded function found
ERROR: 0:18: '=' : dimension mismatch
ERROR: 0:18: '=' : cannot convert from 'const mediump float' to 'mediump 3X3 matrix of float'


Ich verstehe ja nur nicht warum ich eine 'mat3' übergebe und mir gesagt wird ich hätte einen 'float' übergeben. ^^
Irgendwas übersehe ich :/

** update **
Der selbe Fehler tritt auf wenn ich versuche transpose() im Vertex Shader zu nutzen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 10, 2019 15:55 
Offline
DGL Member

Registriert: Di Mai 09, 2017 09:27
Beiträge: 22
Wohnort: Rostock
Programmiersprache: Dart, Java, JS, TS
Ich konnte mein Problem lösen indem ich auf WebGL 2 umgestiegen bin.
Meine Shader habe ich von 'GLSL 100' auf 'GLSL 300 es' umgezogen, jetzt macht transpose(mat3 m) keine Probleme mehr.

Mein Normal Mapping Code liefert zwar noch immer falsche Ergebnisse was die Beleuchtung angeht, aber das ist eine andere Geschichte. xD

Danke nochmal End, dass du dich meiner angenommen hast. :P

Gruß
Pixelschubser


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 » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 17 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.063s | 18 Queries | GZIP : On ]