make it fancy

This commit is contained in:
Luca Conte 2024-05-02 14:19:09 +02:00
parent 59713405b1
commit 95642ae818
4 changed files with 69 additions and 18 deletions

View File

@ -1,22 +1,43 @@
#version 330 core
in vec3 normal;
in vec3 fragmentPosition;
vec4 ambientLight = vec4(0.1, 0.1, 0.1, 1.0);
vec4 surfaceColor = vec4(0.7, 0.7, 0.9, 1.0);
uniform vec4 ambientColor;
uniform vec4 diffusionColor;
uniform vec4 specularColor;
vec3 lightPosition = vec3(3.0, 3.0, 3.0);
vec4 lightColor = vec4(1.0, 1.0, 1.0, 1.0);
uniform float shininess;
uniform vec4 ambientLight;
uniform vec3 lightPosition;
uniform vec4 lightColor;
float emissionStrength = 0.1;
float emissionStrength = 0.0;
void main() {
vec3 norm = normalize(normal);
vec3 lightDir = normalize(lightPosition - fragmentPosition);
vec3 eyeDir = -normalize(fragmentPosition);
float diff = max(dot(norm, lightDir), 0.0);
gl_FragColor = surfaceColor * emissionStrength + ambientLight * surfaceColor + diff * lightColor * surfaceColor;
vec3 halfway = (lightDir + eyeDir) / length(lightDir + eyeDir);
float specular = pow(max(dot(halfway, norm), 0.0), shininess);
gl_FragColor =
// EMISSION
diffusionColor * emissionStrength +
// // AMBIENT
ambientLight * ambientColor +
// DIFFUSION
diff * lightColor * diffusionColor +
// SPECULAR
specular * lightColor * specularColor;
}

View File

@ -241,7 +241,7 @@ void draw(void) {
// -------------- PROJECTION TRANSFORMATION ----------------
mat4 projectionTransformation;
GLfloat near = 0.1f;
GLfloat far = 10.0f;
GLfloat far = 20.0f;
perspectiveProjection(&projectionTransformation, near, far);
@ -252,11 +252,36 @@ void draw(void) {
normalisedDeviceCoordinatesFov(&normalisationTransformation, fovy, aspectRatio, near, far);
mat4 modelView;
identity(&modelView);
multiply(&modelView, &modelTransformation, &modelView);
multiply(&modelView, &viewingTransformation, &modelView);
mat4 projection;
identity(&projection);
multiply(&projection, &projectionTransformation, &projection);
multiply(&projection, &normalisationTransformation, &projection);
// send transformation matrix to shader
glUniformMatrix4fv(glGetUniformLocation(program, "modelTransformation"), 1, GL_FALSE, (GLfloat*)&modelTransformation);
glUniformMatrix4fv(glGetUniformLocation(program, "viewingTransformation"), 1, GL_FALSE, (GLfloat*)&viewingTransformation);
glUniformMatrix4fv(glGetUniformLocation(program, "projectionTransformation"), 1, GL_FALSE, (GLfloat*)&projectionTransformation);
glUniformMatrix4fv(glGetUniformLocation(program, "normalisationTransformation"), 1, GL_FALSE, (GLfloat*)&normalisationTransformation);
glUniformMatrix4fv(glGetUniformLocation(program, "modelView"), 1, GL_FALSE, (GLfloat*)&modelView);
glUniformMatrix4fv(glGetUniformLocation(program, "projection"), 1, GL_FALSE, (GLfloat*)&projection);
vec4 lightPosition = {cos(stepi * 2) * 3.0f, 3.0f, sin(stepi * 2) * 3.0f, 1.0f};
multiplyAny((GLfloat *)&lightPosition, (GLfloat *)&modelView, (GLfloat *)&lightPosition, 4, 4, 1);
glUniform3f(glGetUniformLocation(program, "lightPosition"), lightPosition.x, lightPosition.y, lightPosition.z);
// SET MATERIAL DATA
glUniform4f(glGetUniformLocation(program, "ambientColor"), 0.25f, 0.22f, 0.06f, 1.0f);
glUniform4f(glGetUniformLocation(program, "diffusionColor"), 0.35f, 0.31f, 0.09f, 1.0f);
glUniform4f(glGetUniformLocation(program, "specularColor"), 0.80f, 0.72f, 0.21f, 1.0f);
glUniform1f(glGetUniformLocation(program, "shininess"), 83.2f * 4.0f);
// SET LIGHT DATA
glUniform4f(glGetUniformLocation(program, "lightColor"), 1.0f, 1.0f, 1.0f, 1.0f);
glUniform4f(glGetUniformLocation(program, "ambientLight"), 0.2f, 0.2f, 0.2f, 1.0f);
// draw!!1
glDrawArrays(GL_TRIANGLES, 0, numFaces * 3);

View File

@ -9,6 +9,13 @@ typedef struct {
GLfloat z;
} vec3;
typedef struct {
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat w;
} vec4;
typedef struct {
GLfloat m00;
GLfloat m10;

View File

@ -2,18 +2,16 @@
layout (location = 0) in vec3 aPosition;
layout (location = 1) in vec3 aNormal;
uniform mat4 modelTransformation;
uniform mat4 viewingTransformation;
uniform mat4 projectionTransformation;
uniform mat4 normalisationTransformation;
uniform mat4 modelView;
uniform mat4 projection;
// uniform mat4 modelTransformation;
out vec3 normal;
out vec3 fragmentPosition;
void main() {
normal = vec3(modelTransformation * vec4(aNormal, 1.0));
normal = mat3(transpose(inverse(modelView))) * aNormal;
gl_Position = normalisationTransformation * projectionTransformation * viewingTransformation * modelTransformation * vec4(aPosition, 1.0);
fragmentPosition = vec3(modelTransformation * vec4(aPosition, 1.0));
gl_Position = projection * modelView * vec4(aPosition, 1.0);
fragmentPosition = vec3(modelView * vec4(aPosition, 1.0));
}