lab4 and 5
This commit is contained in:
parent
023edecd35
commit
d05ed9c720
@ -22,6 +22,7 @@ Core::Shader_Loader shaderLoader;
|
|||||||
|
|
||||||
Core::RenderContext shipContext;
|
Core::RenderContext shipContext;
|
||||||
Core::RenderContext sphereContext;
|
Core::RenderContext sphereContext;
|
||||||
|
Core::RenderContext asteroidContext;
|
||||||
|
|
||||||
glm::vec3 cameraPos = glm::vec3(-4.f, 0, 0);
|
glm::vec3 cameraPos = glm::vec3(-4.f, 0, 0);
|
||||||
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
|
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
|
||||||
@ -104,6 +105,7 @@ void drawObjectColor(Core::RenderContext& context, glm::mat4 modelMatrix, glm::v
|
|||||||
void renderScene(GLFWwindow* window)
|
void renderScene(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
glClearColor(0.0f, 0.3f, 0.3f, 1.0f);
|
glClearColor(0.0f, 0.3f, 0.3f, 1.0f);
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glm::mat4 transformation;
|
glm::mat4 transformation;
|
||||||
float time = glfwGetTime();
|
float time = glfwGetTime();
|
||||||
@ -112,16 +114,48 @@ void renderScene(GLFWwindow* window)
|
|||||||
deltaTime = glm::min(deltaTime, 0.1f);
|
deltaTime = glm::min(deltaTime, 0.1f);
|
||||||
lastFrameTime = time;
|
lastFrameTime = time;
|
||||||
|
|
||||||
|
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
//zad6
|
||||||
|
for (int i = -10; i < 10; i++) {
|
||||||
|
glm::mat4 transformation = glm::translate(glm::vec3(i , 0.5, i ))
|
||||||
|
* glm::scale(glm::vec3(0.05));
|
||||||
|
drawObjectColor(sphereContext, transformation, glm::vec3(1, 1, 1));
|
||||||
|
}
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
float planetR = 3 + 2 * i;
|
||||||
|
float planetAngle = time / 3 + i;
|
||||||
|
|
||||||
|
glm::mat4 planetRotateM = glm::eulerAngleXYZ(planetAngle, 0.1f * i, 0.f);
|
||||||
//planet
|
//planet
|
||||||
transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
transformation = planetRotateM * glm::translate(glm::vec3(0, planetR, 0))
|
||||||
* glm::scale(glm::vec3(0.4));
|
* glm::scale(glm::vec3(0.5));
|
||||||
drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));
|
drawObjectColor(sphereContext, transformation, glm::vec3(0.3 + 0.1 * i, 0.3 - 0.05 * i, 0.2));
|
||||||
//satelite
|
//satelite
|
||||||
transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
transformation = planetRotateM * glm::translate(glm::vec3(0, planetR, 0))
|
||||||
* glm::eulerAngleX(time / 2) * glm::translate(glm::vec3(0, 2.f, 0))
|
* glm::eulerAngleX(time / 2) * glm::translate(glm::vec3(0, 1.f, 0))
|
||||||
* glm::scale(glm::vec3(0.2));
|
* glm::scale(glm::vec3(0.2));
|
||||||
drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));
|
drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));
|
||||||
|
}
|
||||||
|
//planet
|
||||||
|
//transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
||||||
|
// * glm::scale(glm::vec3(0.4));
|
||||||
|
//drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));
|
||||||
|
////satelite
|
||||||
|
//transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
||||||
|
// * glm::eulerAngleX(time / 2) * glm::translate(glm::vec3(0, 2.f, 0))
|
||||||
|
// * glm::scale(glm::vec3(0.2));
|
||||||
|
//drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
transformation = glm::eulerAngleXYZ(2 * time + i, 0.f, 0.f) * glm::translate(glm::vec3(0, 10, 0))
|
||||||
|
* glm::scale(glm::vec3(0.0005));
|
||||||
|
drawObjectColor(asteroidContext, transformation, glm::vec3(1.0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
//satelite of satelite
|
//satelite of satelite
|
||||||
/*transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
/*transformation = glm::eulerAngleXYZ(time / 3, 0.f, 0.f) * glm::translate(glm::vec3(0, 4, 0))
|
||||||
* glm::eulerAngleX(time / 2) * glm::translate(glm::vec3(0, 2.f, 0))
|
* glm::eulerAngleX(time / 2) * glm::translate(glm::vec3(0, 2.f, 0))
|
||||||
@ -203,6 +237,7 @@ void init(GLFWwindow* window)
|
|||||||
|
|
||||||
loadModelToContext("./models/sphere.obj", sphereContext);
|
loadModelToContext("./models/sphere.obj", sphereContext);
|
||||||
loadModelToContext("./models/spaceship.obj", shipContext);
|
loadModelToContext("./models/spaceship.obj", shipContext);
|
||||||
|
loadModelToContext("./models/10464_Asteroid_v1_Iterations-2.obj", asteroidContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown(GLFWwindow* window)
|
void shutdown(GLFWwindow* window)
|
||||||
|
@ -1,18 +1,25 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
|
|
||||||
uniform vec3 color;
|
uniform vec3 color;
|
||||||
uniform vec3 lightDir;
|
uniform vec3 lightPos;
|
||||||
uniform vec3 lightColor;
|
uniform vec3 lightColor;
|
||||||
uniform vec3 cameraPos;
|
uniform vec3 cameraPos;
|
||||||
|
|
||||||
uniform float time;
|
uniform float time;
|
||||||
|
uniform float lightExp;
|
||||||
|
|
||||||
in vec3 vertexNormalOut;
|
in vec3 vertexNormalOut;
|
||||||
in vec3 vertexPosOut;
|
in vec3 vertexPosOut;
|
||||||
out vec4 outColor;
|
out vec4 outColor;
|
||||||
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
vec3 lightDir = normalize(vertexPosOut - lightPos);
|
||||||
|
|
||||||
|
float lightDistance = length(vertexPosOut - lightPos);
|
||||||
|
vec3 newLightColor = lightColor / pow(lightDistance, 2);
|
||||||
|
|
||||||
vec3 normalizedVertexNormal = normalize(vertexNormalOut);
|
vec3 normalizedVertexNormal = normalize(vertexNormalOut);
|
||||||
float intensity = dot(normalizedVertexNormal, -lightDir);
|
float intensity = dot(normalizedVertexNormal, -lightDir);
|
||||||
intensity = max(intensity, 0.0);
|
intensity = max(intensity, 0.0);
|
||||||
@ -24,5 +31,6 @@ void main()
|
|||||||
float specular = pow(max(dot(viewDir, reflectDir), 0.0), glossPow);
|
float specular = pow(max(dot(viewDir, reflectDir), 0.0), glossPow);
|
||||||
|
|
||||||
float diffuse = intensity;
|
float diffuse = intensity;
|
||||||
outColor = vec4(lightColor * (color * diffuse + specular ), 1.0);
|
outColor = vec4(newLightColor * (color * diffuse + specular ), 1.0);
|
||||||
|
outColor = 1 - exp(-outColor * lightExp);
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,23 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
|
|
||||||
uniform vec3 color;
|
uniform vec3 color;
|
||||||
|
uniform vec3 lightPos;
|
||||||
|
uniform vec3 lightColor;
|
||||||
|
uniform vec3 cameraPos;
|
||||||
|
|
||||||
|
float M_PI = 3.1415926535897932384626433832795;
|
||||||
|
|
||||||
in vec3 interpNormal;
|
in vec3 interpNormal;
|
||||||
|
in vec3 vertexNormalOut;
|
||||||
out vec4 out_color;
|
in vec3 vertexPosOut;
|
||||||
|
out vec4 outColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
out_color = vec4(color, 1.0);
|
vec3 normalizedVertexNormal = normalize(vertexNormalOut);
|
||||||
|
vec3 viewDir = normalize(cameraPos - vertexPosOut);
|
||||||
|
float angle = dot(viewDir, normalizedVertexNormal);
|
||||||
|
|
||||||
|
//outColor = vec4(color * (angle / M_PI), 1.0);
|
||||||
|
outColor = vec4(mix(color, vec3(1), angle), 1.0);
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,16 @@ layout(location = 0) in vec3 vertexPosition;
|
|||||||
layout(location = 1) in vec3 vertexNormal;
|
layout(location = 1) in vec3 vertexNormal;
|
||||||
layout(location = 2) in vec2 vertexTexCoord;
|
layout(location = 2) in vec2 vertexTexCoord;
|
||||||
|
|
||||||
|
|
||||||
uniform mat4 transformation;
|
uniform mat4 transformation;
|
||||||
|
uniform mat4 modelMat;
|
||||||
|
|
||||||
|
out vec3 vertexNormalOut;
|
||||||
|
out vec3 vertexPosOut;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = transformation * vec4(vertexPosition, 1.0);
|
gl_Position = transformation * vec4(vertexPosition, 1.0);
|
||||||
|
vec4 worldNormal = modelMat * vec4(vertexNormal, 0.0);
|
||||||
|
vertexNormalOut = worldNormal.xyz;
|
||||||
|
vertexPosOut = (modelMat * vec4(vertexPosition, 1.0)).xyz;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
|
|
||||||
GLuint program;
|
GLuint program;
|
||||||
|
GLuint programSun;
|
||||||
|
|
||||||
|
|
||||||
Core::Shader_Loader shaderLoader;
|
Core::Shader_Loader shaderLoader;
|
||||||
@ -29,6 +30,7 @@ glm::vec3 cameraPos = glm::vec3(-4.f, 0, 0);
|
|||||||
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
|
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
|
||||||
glm::vec3 lightDir = glm::normalize(glm::vec3(1.f, 1.f, 1.f));
|
glm::vec3 lightDir = glm::normalize(glm::vec3(1.f, 1.f, 1.f));
|
||||||
glm::vec3 lightColor = glm::vec3(1.f, 1.f, 1.f);
|
glm::vec3 lightColor = glm::vec3(1.f, 1.f, 1.f);
|
||||||
|
float lightExp = 100;
|
||||||
|
|
||||||
glm::vec3 spaceshipPos = glm::vec3(-4.f, 0, 0);
|
glm::vec3 spaceshipPos = glm::vec3(-4.f, 0, 0);
|
||||||
glm::vec3 spaceshipDir = glm::vec3(1.f, 0.f, 0.f);
|
glm::vec3 spaceshipDir = glm::vec3(1.f, 0.f, 0.f);
|
||||||
@ -87,15 +89,17 @@ glm::mat4 createPerspectiveMatrix()
|
|||||||
return perspectiveMatrix;
|
return perspectiveMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawObjectColor(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color) {
|
void drawObjectColor(GLuint program, Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color) {
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
||||||
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
||||||
glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation);
|
glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation);
|
||||||
glUniformMatrix4fv(glGetUniformLocation(program, "modelMat"), 1, GL_FALSE, (float*)&modelMatrix);
|
glUniformMatrix4fv(glGetUniformLocation(program, "modelMat"), 1, GL_FALSE, (float*)&modelMatrix);
|
||||||
glUniform3f(glGetUniformLocation(program, "color"), color.x, color.y, color.z);
|
glUniform3f(glGetUniformLocation(program, "color"), color.x, color.y, color.z);
|
||||||
glUniform3f(glGetUniformLocation(program, "lightDir"), lightDir.x, lightDir.y, lightDir.z);
|
//glUniform3f(glGetUniformLocation(program, "lightDir"), lightDir.x, lightDir.y, lightDir.z);
|
||||||
|
glUniform3f(glGetUniformLocation(program, "lightPos"), 0.f, 0.f, 0.f);
|
||||||
glUniform3f(glGetUniformLocation(program, "lightColor"), lightColor.x, lightColor.y, lightColor.z);
|
glUniform3f(glGetUniformLocation(program, "lightColor"), lightColor.x, lightColor.y, lightColor.z);
|
||||||
|
glUniform1f(glGetUniformLocation(program, "lightExp"), lightExp);
|
||||||
glUniform3f(glGetUniformLocation(program, "cameraPos"), cameraPos.x, cameraPos.y, cameraPos.z);
|
glUniform3f(glGetUniformLocation(program, "cameraPos"), cameraPos.x, cameraPos.y, cameraPos.z);
|
||||||
//TEST
|
//TEST
|
||||||
glUniform1f(glGetUniformLocation(program, "time"), lastTime);
|
glUniform1f(glGetUniformLocation(program, "time"), lastTime);
|
||||||
@ -114,11 +118,11 @@ void renderScene(GLFWwindow* window)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
drawObjectColor(sphereContext, glm::mat4(), glm::vec3(1.0, 1.0, 0.3));
|
drawObjectColor(programSun, sphereContext, glm::mat4(), glm::vec3(1.0, 1.0, 0.3));
|
||||||
|
|
||||||
drawObjectColor(sphereContext, glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3));
|
drawObjectColor(program, sphereContext, glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3));
|
||||||
|
|
||||||
drawObjectColor(sphereContext,
|
drawObjectColor(program, sphereContext,
|
||||||
glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)),
|
glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)),
|
||||||
glm::vec3(0.5, 0.5, 0.5));
|
glm::vec3(0.5, 0.5, 0.5));
|
||||||
|
|
||||||
@ -136,7 +140,7 @@ void renderScene(GLFWwindow* window)
|
|||||||
// glm::translate(cameraPos + 1.5 * cameraDir + cameraUp * -0.5f) * inveseCameraRotrationMatrix * glm::eulerAngleY(glm::pi<float>()),
|
// glm::translate(cameraPos + 1.5 * cameraDir + cameraUp * -0.5f) * inveseCameraRotrationMatrix * glm::eulerAngleY(glm::pi<float>()),
|
||||||
// glm::vec3(0.3, 0.3, 0.5)
|
// glm::vec3(0.3, 0.3, 0.5)
|
||||||
// );
|
// );
|
||||||
drawObjectColor(shipContext,
|
drawObjectColor(program, shipContext,
|
||||||
glm::translate(spaceshipPos) * specshipCameraRotrationMatrix * glm::eulerAngleY(glm::pi<float>()) * glm::scale(glm::vec3(0.2f)),
|
glm::translate(spaceshipPos) * specshipCameraRotrationMatrix * glm::eulerAngleY(glm::pi<float>()) * glm::scale(glm::vec3(0.2f)),
|
||||||
glm::vec3(0.3, 0.3, 0.5)
|
glm::vec3(0.3, 0.3, 0.5)
|
||||||
);
|
);
|
||||||
@ -168,6 +172,7 @@ void init(GLFWwindow* window)
|
|||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
program = shaderLoader.CreateProgram("shaders/shader_5_1.vert", "shaders/shader_5_1.frag");
|
program = shaderLoader.CreateProgram("shaders/shader_5_1.vert", "shaders/shader_5_1.frag");
|
||||||
|
programSun = shaderLoader.CreateProgram("shaders/shader_5_sun.vert", "shaders/shader_5_sun.frag");
|
||||||
|
|
||||||
loadModelToContext("./models/sphere.obj", sphereContext);
|
loadModelToContext("./models/sphere.obj", sphereContext);
|
||||||
loadModelToContext("./models/spaceship.obj", shipContext);
|
loadModelToContext("./models/spaceship.obj", shipContext);
|
||||||
@ -215,6 +220,10 @@ void processInput(GLFWwindow* window)
|
|||||||
|
|
||||||
//cameraDir = glm::normalize(-cameraPos);
|
//cameraDir = glm::normalize(-cameraPos);
|
||||||
|
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_1) == GLFW_PRESS)
|
||||||
|
lightExp -= 1;
|
||||||
|
if (glfwGetKey(window, GLFW_KEY_2) == GLFW_PRESS)
|
||||||
|
lightExp += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// funkcja jest glowna petla
|
// funkcja jest glowna petla
|
||||||
|
Loading…
Reference in New Issue
Block a user