add sun shaders and render sun
This commit is contained in:
parent
db0ed6d7c4
commit
47c8242bfd
BIN
cw_8/models/sun.glb
Normal file
BIN
cw_8/models/sun.glb
Normal file
Binary file not shown.
@ -15,7 +15,7 @@ out vec2 TexCoords;
|
|||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
||||||
TexCoords = vertexTexCoord;
|
TexCoords = -vertexTexCoord;
|
||||||
worldPos = vec3(modelMatrix * vec4(vertexPosition,1));
|
worldPos = vec3(modelMatrix * vec4(vertexPosition,1));
|
||||||
Normal = normalize((modelMatrix * vec4(vertexNormal,0)).xyz);
|
Normal = normalize((modelMatrix * vec4(vertexNormal,0)).xyz);
|
||||||
|
|
||||||
|
15
cw_8/shaders/sun.frag
Normal file
15
cw_8/shaders/sun.frag
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#version 430 core
|
||||||
|
|
||||||
|
uniform sampler2D colorTexture;
|
||||||
|
|
||||||
|
in vec3 vecNormal;
|
||||||
|
in vec3 worldPos;
|
||||||
|
|
||||||
|
in vec2 outVertexTexCoord;
|
||||||
|
|
||||||
|
out vec4 outColor;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 textureColor = texture2D(colorTexture, outVertexTexCoord);
|
||||||
|
outColor = vec4(textureColor.rgb,1);
|
||||||
|
}
|
21
cw_8/shaders/sun.vert
Normal file
21
cw_8/shaders/sun.vert
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#version 430 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 vertexPosition;
|
||||||
|
layout(location = 1) in vec3 vertexNormal;
|
||||||
|
layout(location = 2) in vec2 vertexTexCoord;
|
||||||
|
|
||||||
|
uniform mat4 transformation;
|
||||||
|
uniform mat4 modelMatrix;
|
||||||
|
|
||||||
|
out vec3 vecNormal;
|
||||||
|
out vec3 worldPos;
|
||||||
|
|
||||||
|
out vec2 outVertexTexCoord;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
worldPos = (modelMatrix* vec4(vertexPosition,1)).xyz;
|
||||||
|
vecNormal = (modelMatrix* vec4(vertexNormal,0)).xyz;
|
||||||
|
gl_Position = transformation * vec4(vertexPosition, 1.0);
|
||||||
|
outVertexTexCoord = -1*vertexTexCoord;
|
||||||
|
}
|
@ -11,10 +11,21 @@
|
|||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
|
|
||||||
GLuint program;
|
GLuint program;
|
||||||
|
GLuint programSun;
|
||||||
|
|
||||||
Core::Shader_Loader shaderLoader;
|
Core::Shader_Loader shaderLoader;
|
||||||
|
|
||||||
Core::RenderContext shipContext;
|
Core::RenderContext shipContext;
|
||||||
Core::RenderContext sphereContext;
|
Core::RenderContext earthContext;
|
||||||
|
Core::RenderContext sunContext;
|
||||||
|
|
||||||
|
namespace texture {
|
||||||
|
|
||||||
|
GLuint earth_albedo;
|
||||||
|
GLuint earth_normal;
|
||||||
|
|
||||||
|
GLuint sun;
|
||||||
|
}
|
||||||
|
|
||||||
float aspectRatio = 1.f;
|
float aspectRatio = 1.f;
|
||||||
|
|
||||||
@ -27,22 +38,32 @@ void loadModelToContext(std::string path, Core::RenderContext& context);
|
|||||||
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
|
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
|
||||||
void processInput(GLFWwindow* window);
|
void processInput(GLFWwindow* window);
|
||||||
void shutdown(GLFWwindow* window);
|
void shutdown(GLFWwindow* window);
|
||||||
|
|
||||||
glm::mat4 createPerspectiveMatrix();
|
glm::mat4 createPerspectiveMatrix();
|
||||||
glm::mat4 createCameraMatrix();
|
glm::mat4 createCameraMatrix();
|
||||||
|
|
||||||
void drawObject(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color);
|
void drawObjectEarth(Core::RenderContext& context, glm::mat4 modelMatrix);
|
||||||
|
void drawObjectSun(Core::RenderContext& context, glm::mat4 modelMatrix);
|
||||||
|
|
||||||
void init(GLFWwindow* window)
|
void init(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
program = shaderLoader.CreateProgram("shaders/pbr.vert", "shaders/pbr.frag");
|
program = shaderLoader.CreateProgram("shaders/pbr.vert", "shaders/pbr.frag");
|
||||||
|
programSun = shaderLoader.CreateProgram("shaders/sun.vert", "shaders/sun.frag");
|
||||||
|
|
||||||
//load models here
|
//load models here
|
||||||
loadModelToContext("./models/sphere.obj", sphereContext);
|
loadModelToContext("./models/earth.obj", earthContext);
|
||||||
loadModelToContext("./models/spaceship.obj", shipContext);
|
loadModelToContext("./models/spaceship.obj", shipContext);
|
||||||
|
loadModelToContext("./models/sun.glb", sunContext);
|
||||||
|
|
||||||
|
|
||||||
|
//load textures here
|
||||||
|
texture::earth_albedo = Core::LoadTexture("textures/earth/albedo.jpeg");
|
||||||
|
texture::earth_normal = Core::LoadTexture("textures/earth/bump.jpeg");
|
||||||
|
texture::sun = Core::LoadTexture("textures/sun/sun.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderScene(GLFWwindow* window){
|
void renderScene(GLFWwindow* window){
|
||||||
@ -52,8 +73,8 @@ void renderScene(GLFWwindow* window){
|
|||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
|
||||||
//desired objects go here
|
//desired objects go here
|
||||||
|
drawObjectSun(sunContext, glm::mat4());
|
||||||
drawObject(sphereContext, glm::mat4(), glm::vec3(255, 0.1, 251));
|
//drawObjectEarth(earthContext, glm::mat4());
|
||||||
//desired objects end here
|
//desired objects end here
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
@ -64,7 +85,7 @@ void processInput(GLFWwindow* window)
|
|||||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
|
|
||||||
float cameraSpeed = 0.05f;
|
float cameraSpeed = 0.1f;
|
||||||
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
|
||||||
cameraPos += cameraSpeed * cameraFront;
|
cameraPos += cameraSpeed * cameraFront;
|
||||||
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
||||||
@ -75,8 +96,7 @@ void processInput(GLFWwindow* window)
|
|||||||
cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
|
cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
//functions below need not be touched
|
void drawObjectEarth(Core::RenderContext& context, glm::mat4 modelMatrix) {
|
||||||
void drawObject(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color) {
|
|
||||||
|
|
||||||
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
||||||
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
||||||
@ -84,21 +104,31 @@ void drawObject(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 c
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation);
|
glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation);
|
||||||
glUniformMatrix4fv(glGetUniformLocation(program, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
|
glUniformMatrix4fv(glGetUniformLocation(program, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
|
||||||
|
|
||||||
glUniform1f(glGetUniformLocation(program, "exposition"), 1.0f);
|
Core::SetActiveTexture(texture::earth_albedo, "albedoMap", program, 0);
|
||||||
|
Core::SetActiveTexture(texture::earth_normal, "normalMap", program, 1);
|
||||||
glUniform3f(glGetUniformLocation(program, "color"), color.x, color.y, color.z);
|
|
||||||
|
|
||||||
glUniform1f(glGetUniformLocation(program, "metallic"), 1.0f);
|
|
||||||
glUniform1f(glGetUniformLocation(program, "roughness"), 1.0f);
|
|
||||||
|
|
||||||
glUniform3f(glGetUniformLocation(program, "cameraPos"), cameraPos.x, cameraPos.y, cameraPos.z);
|
|
||||||
|
|
||||||
glUniform3f(glGetUniformLocation(program, "lightPos"), 0.0f, 0.0f, 0.0f);
|
|
||||||
glUniform3f(glGetUniformLocation(program, "lightColor"), 30.f, 0.f, 0.f);
|
|
||||||
|
|
||||||
Core::DrawContext(context);
|
Core::DrawContext(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drawObjectSun(Core::RenderContext& context, glm::mat4 modelMatrix) {
|
||||||
|
|
||||||
|
glUseProgram(programSun);
|
||||||
|
|
||||||
|
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
||||||
|
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
||||||
|
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(programSun, "transformation"), 1, GL_FALSE, (float*)&transformation);
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(programSun, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
|
||||||
|
|
||||||
|
Core::SetActiveTexture(texture::sun, "colorTexture", programSun, 0);
|
||||||
|
|
||||||
|
Core::DrawContext(context);
|
||||||
|
|
||||||
|
glUseProgram(program);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//functions below need not be touched
|
||||||
void loadModelToContext(std::string path, Core::RenderContext& context)
|
void loadModelToContext(std::string path, Core::RenderContext& context)
|
||||||
{
|
{
|
||||||
Assimp::Importer import;
|
Assimp::Importer import;
|
||||||
|
BIN
cw_8/textures/earth/albedo.jpeg
Normal file
BIN
cw_8/textures/earth/albedo.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 MiB |
BIN
cw_8/textures/earth/bump.jpeg
Normal file
BIN
cw_8/textures/earth/bump.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.2 MiB |
BIN
cw_8/textures/sun/sun.png
Normal file
BIN
cw_8/textures/sun/sun.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 949 KiB |
Loading…
Reference in New Issue
Block a user