lab 4 basic tasks
This commit is contained in:
parent
ce33570341
commit
6e48ee3fc2
@ -1,9 +1,27 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
|
|
||||||
|
uniform vec3 color;
|
||||||
|
uniform vec3 background_color;
|
||||||
|
|
||||||
out vec4 out_color;
|
out vec4 out_color;
|
||||||
|
|
||||||
|
//zad5
|
||||||
|
float n = 0.05;
|
||||||
|
float f = 20.;
|
||||||
|
float linear_z() {
|
||||||
|
float z_around_0 = gl_FragCoord.z * 2 - 1;
|
||||||
|
float z = -2 * n * f / (z_around_0 * (n - f) + n + f);
|
||||||
|
return z / -f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
out_color = vec4(1,0,1,1);
|
//zad4
|
||||||
|
// out_color = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1);
|
||||||
|
//zad5
|
||||||
|
// out_color = vec4(vec3(linear_z()), 1);
|
||||||
|
//zad5*
|
||||||
|
out_color = vec4(mix(color, background_color, linear_z()), 1);
|
||||||
|
// out_color = vec4(color, 1);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,9 @@ Core::RenderContext sphereContext;
|
|||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
glm::vec3 spaceshipPos = glm::vec3(-4.f, 0, 0);
|
||||||
|
glm::vec3 spaceshipDir = glm::vec3(1.f, 0.f, 0.f);
|
||||||
GLuint VAO,VBO;
|
GLuint VAO,VBO;
|
||||||
|
|
||||||
float aspectRatio = 1.f;
|
float aspectRatio = 1.f;
|
||||||
@ -69,8 +72,8 @@ glm::mat4 createPerspectiveMatrix()
|
|||||||
float a1 = glm::min(aspectRatio, 1.f);
|
float a1 = glm::min(aspectRatio, 1.f);
|
||||||
float a2 = glm::min(1 / aspectRatio, 1.f);
|
float a2 = glm::min(1 / aspectRatio, 1.f);
|
||||||
perspectiveMatrix = glm::mat4({
|
perspectiveMatrix = glm::mat4({
|
||||||
1,0.,0.,0.,
|
a2,0.,0.,0.,
|
||||||
0.,1,0.,0.,
|
0.,a1,0.,0.,
|
||||||
0.,0.,(f+n) / (n - f),2*f * n / (n - f),
|
0.,0.,(f+n) / (n - f),2*f * n / (n - f),
|
||||||
0.,0.,-1.,0.,
|
0.,0.,-1.,0.,
|
||||||
});
|
});
|
||||||
@ -86,6 +89,8 @@ void drawObjectColor(Core::RenderContext& context, glm::mat4 modelMatrix, glm::v
|
|||||||
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);
|
||||||
|
glUniform3f(glGetUniformLocation(program, "color"), color.x, color.y, color.z);
|
||||||
|
glUniform3f(glGetUniformLocation(program, "background_color"), 0.0f, 0.3f, 0.3f);
|
||||||
Core::DrawContext(context);
|
Core::DrawContext(context);
|
||||||
}
|
}
|
||||||
void renderScene(GLFWwindow* window)
|
void renderScene(GLFWwindow* window)
|
||||||
@ -97,8 +102,37 @@ void renderScene(GLFWwindow* window)
|
|||||||
|
|
||||||
|
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
drawObjectColor(sphereContext, glm::mat4(), glm::vec3(0.3, 0.3, 0.2));
|
//planet
|
||||||
drawObjectColor(sphereContext, glm::translate(glm::vec3(0, 2, 0)), glm::vec3(0.9, 0.9, 0.2));
|
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));
|
||||||
|
//satelite of 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::eulerAngleX(time) * glm::translate(glm::vec3(0, 1.f, 0))
|
||||||
|
* glm::scale(glm::vec3(0.1));
|
||||||
|
drawObjectColor(sphereContext, transformation, glm::vec3(0.3, 0.3, 0.2));*/
|
||||||
|
//sun
|
||||||
|
drawObjectColor(sphereContext, glm::mat4(), glm::vec3(0.9, 0.9, 0.2));
|
||||||
|
//spaceship
|
||||||
|
glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, glm::vec3(0.f, 1.f, 0.f)));
|
||||||
|
glm::vec3 spaceshipUp = glm::normalize(glm::cross(spaceshipSide, spaceshipDir));
|
||||||
|
glm::mat4 speceshipCameraRotrationMatrix = glm::mat4({
|
||||||
|
spaceshipSide.x,spaceshipSide.y,spaceshipSide.z,0,
|
||||||
|
spaceshipUp.x,spaceshipUp.y,spaceshipUp.z ,0,
|
||||||
|
-spaceshipDir.x,-spaceshipDir.y,-spaceshipDir.z,0,
|
||||||
|
0.,0.,0.,1.,
|
||||||
|
});
|
||||||
|
|
||||||
|
drawObjectColor(shipContext,
|
||||||
|
glm::translate(spaceshipPos) * speceshipCameraRotrationMatrix * glm::eulerAngleY(glm::pi<float>()) * glm::scale(glm::vec3(0.5f)),
|
||||||
|
glm::vec3(0)
|
||||||
|
);
|
||||||
|
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
@ -129,7 +163,7 @@ void init(GLFWwindow* window)
|
|||||||
program = shaderLoader.CreateProgram("shaders/shader_4_1.vert", "shaders/shader_4_1.frag");
|
program = shaderLoader.CreateProgram("shaders/shader_4_1.vert", "shaders/shader_4_1.frag");
|
||||||
|
|
||||||
loadModelToContext("./models/sphere.obj",sphereContext);
|
loadModelToContext("./models/sphere.obj",sphereContext);
|
||||||
|
loadModelToContext("./models/spaceship.obj", shipContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown(GLFWwindow* window)
|
void shutdown(GLFWwindow* window)
|
||||||
@ -140,26 +174,28 @@ void shutdown(GLFWwindow* window)
|
|||||||
//obsluga wejscia
|
//obsluga wejscia
|
||||||
void processInput(GLFWwindow* window)
|
void processInput(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
glm::vec3 cameraSide = glm::normalize(glm::cross(cameraDir, glm::vec3(0.f,1.f,0.f)));
|
glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, glm::vec3(0.f, 1.f, 0.f)));
|
||||||
float angleSpeed = 0.05f;
|
float angleSpeed = 0.005f;
|
||||||
float moveSpeed = 0.05f;
|
float moveSpeed = 0.005f;
|
||||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
}
|
}
|
||||||
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
|
||||||
cameraPos += cameraDir * moveSpeed;
|
spaceshipPos += spaceshipDir * moveSpeed;
|
||||||
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
||||||
cameraPos -= cameraDir * moveSpeed;
|
spaceshipPos -= spaceshipDir * moveSpeed;
|
||||||
if (glfwGetKey(window, GLFW_KEY_X) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_X) == GLFW_PRESS)
|
||||||
cameraPos += cameraSide * moveSpeed;
|
spaceshipPos += spaceshipSide * moveSpeed;
|
||||||
if (glfwGetKey(window, GLFW_KEY_Z) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_Z) == GLFW_PRESS)
|
||||||
cameraPos -= cameraSide * moveSpeed;
|
spaceshipPos -= spaceshipSide * moveSpeed;
|
||||||
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
|
||||||
cameraDir = glm::vec3(glm::eulerAngleY(angleSpeed) * glm::vec4(cameraDir, 0));
|
spaceshipDir = glm::vec3(glm::eulerAngleY(angleSpeed) * glm::vec4(spaceshipDir, 0));
|
||||||
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
|
||||||
cameraDir = glm::vec3(glm::eulerAngleY(-angleSpeed) * glm::vec4(cameraDir, 0));
|
spaceshipDir = glm::vec3(glm::eulerAngleY(-angleSpeed) * glm::vec4(spaceshipDir, 0));
|
||||||
|
|
||||||
//cameraDir = glm::normalize(-cameraPos);
|
//cameraDir = glm::normalize(-cameraPos);
|
||||||
|
cameraPos = spaceshipPos - 1.5f * spaceshipDir + glm::vec3(0, 0.5, 0);
|
||||||
|
cameraDir = spaceshipDir;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,8 +75,8 @@ glm::mat4 createPerspectiveMatrix()
|
|||||||
float a1 = glm::min(aspectRatio, 1.f);
|
float a1 = glm::min(aspectRatio, 1.f);
|
||||||
float a2 = glm::min(1 / aspectRatio, 1.f);
|
float a2 = glm::min(1 / aspectRatio, 1.f);
|
||||||
perspectiveMatrix = glm::mat4({
|
perspectiveMatrix = glm::mat4({
|
||||||
1,0.,0.,0.,
|
a2,0.,0.,0.,
|
||||||
0.,aspectRatio,0.,0.,
|
0.,a1,0.,0.,
|
||||||
0.,0.,(f + n) / (n - f),2 * f * n / (n - f),
|
0.,0.,(f + n) / (n - f),2 * f * n / (n - f),
|
||||||
0.,0.,-1.,0.,
|
0.,0.,-1.,0.,
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user