Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 |
void main(){ position = vec3(pmv*vec4(vertex0, 1.0)); // pmv = ProjectionModelView normal = vec3(normalPmv*vec4(normal0, 1.0)); // invertierte, transponierte pmv texCoord = texCoord0; gl_Position = pmv*vec4(vertex0, 1.0); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void main(){ vec3 p = texture(position, vertex).xyz; // vertex = Koordinate eines Quads für den rasterizer vec3 n = normalize(texture(normal, vertex)).xyz; vec4 color = 0.5*texture(diffuse, vertex); // 0.5 ist nur ein Testwert // directional light vec3 l = normalize(light0.position); float ndotl = max(dot(n, l), 0.0); if(ndotl > 0.0){ vec3 h = normalize(-camera-l); // halfway vector float ndoth = max(dot(n, h), 0.0); color += light0.diffuse*ndotl+light0.specular*pow(ndoth, mat0.shininess); } gl_FragColor = color; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (29.03.2014, 14:12)
Community-Fossil
C-/C++-Quelltext |
|
1 |
shader->sendUniform4x4("normalPmv", (camera->projectionMatrix*camera->viewMatrix).inverse().transpose().getArray()); |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (30.03.2014, 00:04)
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 |
void main(){ position = vec3(mv*vec4(vertex0, 1.0)); normal = vec3(normalMv*vec4(normal0, 0.0)); // da view*model Matrix (invertiert, transponiert) texCoord = texCoord0; gl_Position = p*mv*vec4(vertex0, 1.0); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#version 330 precision highp float; struct DirLight{ vec3 direction; vec4 diffuse, specular; }; uniform sampler2D position; uniform sampler2D diffuse; uniform sampler2D normal; uniform mat4 inverseView; DirLight light0 = DirLight(vec3(1, 0, 0), vec4(0.0), vec4(0.0)); in vec2 vertex; void main(){ vec3 n = normalize(texture(normal, vertex)).xyz; vec4 color = texture(diffuse, vertex)*0.5; float ndotl = max(dot(n, normalize(light0.direction)), 0.0); // ohne view float ndotl = max(dot(n, normalize(inverseView*vec4(light0.direction, 0.0)).xyz), 0.0); // mit view if(ndotl > 0.0){ color += vec4(ndotl); } gl_FragColor = color; } |
Community-Fossil
Community-Fossil
Quellcode |
|
1 2 3 4 |
position = vec3(m*vec4(vertex0, 1.0)); normal = vec3(normalM*vec4(normal0, 0.0)); texCoord = texCoord0; gl_Position = pmv*vec4(vertex0, 1.0); |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
vec4 point(vec4 color, vec3 p, vec3 n, PointLight pl){ // Ausgangsfarbe, Position, Normale, Punktlicht float ndotl = max(dot(n, normalize(pl.position-p)), 0.0); if(ndotl > 0.0){ float ndoth = max(dot(n, (normalize(camera-p)+normalize(pl.position-p))), 0.0); float distance = length(p-pl.position); float attenuation = 1.0/(pl.constantAttenuation+pl.linearAttenuation*distance+pl.quadraticAttenuation*distance*distance); color += light0.diffuse*ndotl*attenuation+pl.specular*pow(ndoth, 6)*attenuation; // 6 = fixer Testwert } return color; } void main(){ vec3 p = vec3(texture(position, vertex)); vec3 n = vec3(normalize(texture(normal, vertex))); vec4 color = texture(diffuse, vertex)*0.5; // 0.5 = fixer Testwert color = point(color, p, n, light1); // Punktlicht berechnen gl_FragColor = color; } |
C-/C++-Quelltext |
|
1 2 |
shader->sendUniform4x4("pmv", (camera->projectionMatrix*camera->viewMatrix*object->modelMatrix).getArray()); // projection*view*model shader->sendUniform4x4("normalPm", (camera->projectionMatrix*object->modelMatrix).inverse().transpose().getArray()); // transpose(inverse(projection*model)) |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (01.04.2014, 15:15)
Zitat
Und dass Lichtquellen mit negativer Position (hier Punktlicht -2|-2|1) sich kaum oder gar nicht auswirken (garnicht z.B. für das directional):
Community-Fossil
Zitat
Die Position hat auch keinen Einfluss auf directional Light
Zitat
dass müsste die Schachbrett Ebene grün sein (RGB = XYZ).
Nicht unbedingt, ich hab die z-Achse als Hochachse. Vielleicht hängt das ganze Dilemma ja auch damit zusammen?
Werbeanzeige