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 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#version 130 uniform mat4 projection_matrix; uniform mat4 modelview_matrix; uniform mat3 normal_matrix; // Normalisierte Modelview Matrix // Materialeigenschaften uniform vec4 material_ambient; // Umgebungslicht uniform vec4 material_diffuse; // Streuung uniform vec4 material_specular; // Spiegelung uniform vec4 material_emissive; uniform float material_shininess; struct light{ vec4 position; vec4 diffuse; vec4 specular; vec4 ambient; }; uniform light light0; // Lichtquelle in vec3 a_Vertex; in vec2 a_TexCoord0; in vec3 a_Normal; // Normalisierter Vertex out vec4 color; out vec2 texCoord0; void main(void){ vec3 N = normalize(normal_matrix*a_Normal); vec3 L = normalize(modelview_matrix*light0.position).xyz; float NdotL = max(dot(N, L), 0.0); // Winkel zwischen Normal und Licht vec4 finalColor = material_ambient*light0.ambient; // Umgebungslicht wird als fester Wert hinzugefuegt vec4 pos = modelview_matrix*vec4(a_Vertex, 1.0); vec3 E = -pos.xyz; // Sichtvektor negieren // Flaechennormale zeigt in Richtung Lichtquelle if(NdotL > 0.0){ finalColor += material_diffuse*light0.diffuse*NdotL; // Streuung hinzufuegen vec3 HV = normalize(L+E); // Halber normalisierter -Lichtvektor float NdotHV = max(dot(N, HV), 0.0); // Winkel zwischen Normal und -Lichtvektor finalColor += material_specular*light0.specular*pow(NdotHV, material_shininess); // Spiegelung berechnen } // Ausgabe color = finalColor; texCoord0 = a_TexCoord0; gl_Position = projection_matrix*pos; } |
C-/C++-Quelltext |
|
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 |
m_shaderProgram->bindAttrib(0, "a_Vertex"); m_shaderProgram->bindAttrib(1, "a_TexCoord0"); m_shaderProgram->bindAttrib(2, "a_Normal"); m_shaderProgram->linkProgram(); glGetFloatv(GL_MODELVIEW_MATRIX, modelviewMatrix); glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix); m_shaderProgram->bindShader(); m_shaderProgram->sendUniform4x4("modelview_matrix", modelviewMatrix); m_shaderProgram->sendUniform4x4("projection_matrix", projectionMatrix); vector<float> normalMatrix = m_shaderProgram->normalizeMatrix(modelviewMatrix); m_shaderProgram->sendUniform3x3("normal_matrix", &normalMatrix[0]); // Textur m_shaderProgram->sendUniform("texture0", 0); // Materialeigenschaften m_shaderProgram->sendUniform("material_ambient", 0.2, 0.2, 0.2, 1); m_shaderProgram->sendUniform("material_diffuse", 0.8, 0.8, 0.8, 1); m_shaderProgram->sendUniform("material_specular", 1, 1, 1, 1); m_shaderProgram->sendUniform("material_emissive", 0, 0.05, 0, 1); m_shaderProgram->sendUniform("material_shininess", 0); // Lichtquelle m_shaderProgram->sendUniform("light0.ambient", 1, 1, 1, 1); m_shaderProgram->sendUniform("light0.diffuse", 1, 1, 1, 1); m_shaderProgram->sendUniform("light0.specular", 0.3, 0.3, 0.3, 0.3); m_shaderProgram->sendUniform("light0.position", 0, 0.5, -0.2, 0); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (24.03.2011, 18:08)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Community-Fossil
Community-Fossil
Community-Fossil
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 33 34 35 36 37 38 39 40 |
#version 130 uniform mat4 projection_matrix; uniform mat4 modelview_matrix; uniform mat3 normal_matrix; // Normalisierte Modelview Matrix // Materialeigenschaften uniform vec4 material_diffuse; // Beleuchtung uniform vec4 material_specular; // Highlight uniform float material_shininess; struct light{ vec4 position; vec4 diffuse; vec4 specular; }; uniform light light0; // Lichtquelle in vec2 a_TexCoord0; out vec4 color; out vec2 texCoord0; void main(void){ vec4 fColor; vec3 N = normalize(gl_NormalMatrix*gl_Vertex.xyz); vec3 L = normalize(modelview_matrix*light0.position).xyz; float NdotL = max(dot(N, L), 0.0); // Winkel zwischen Normale und Licht if(NdotL > 0.0){ fColor = material_diffuse*light0.diffuse*NdotL; } // Ausgabe texCoord0 = a_TexCoord0; color = fColor; gl_Position = projection_matrix*modelview_matrix*gl_Vertex; } |
Community-Fossil
Werbeanzeige