init hdr buffer
This commit is contained in:
parent
1a1441e98a
commit
92af34a58d
@ -3,42 +3,21 @@
|
|||||||
float AMBIENT = 0.1;
|
float AMBIENT = 0.1;
|
||||||
|
|
||||||
uniform vec3 lightPos;
|
uniform vec3 lightPos;
|
||||||
uniform vec3 lightColor;
|
|
||||||
|
|
||||||
in vec3 vecNormal;
|
in vec3 vecNormal;
|
||||||
in vec3 worldPos;
|
in vec3 worldPos;
|
||||||
in vec2 vtc;
|
in vec2 vtc;
|
||||||
vec4 textureColor;
|
|
||||||
out vec4 outColor;
|
out vec4 outColor;
|
||||||
|
|
||||||
vec3 outputColor;
|
|
||||||
uniform sampler2D colorTexture;
|
uniform sampler2D colorTexture;
|
||||||
|
|
||||||
vec3 toneMapping(vec3 color){
|
|
||||||
float exposure = 0.06;
|
|
||||||
vec3 mapped = 1 - exp(-color*exposure);
|
|
||||||
return mapped;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 lightDir = normalize(lightPos - worldPos);
|
vec3 lightDir = normalize(lightPos - worldPos);
|
||||||
vec3 normal = normalize(vecNormal);
|
vec3 normal = normalize(vecNormal);
|
||||||
<<<<<<<< HEAD:grk/cw 6/shaders/shader_sun.frag
|
|
||||||
//float diffuse = max(0, dot(normal, lightDir));
|
//float diffuse = max(0, dot(normal, lightDir));
|
||||||
|
|
||||||
vec4 textureColor = texture2D(colorTexture, vtc);
|
vec4 textureColor = texture2D(colorTexture, vtc);
|
||||||
outColor = vec4(vec3(textureColor) * 1.5, 1.0);
|
outColor = vec4(vec3(textureColor) * 1.5, 1.0);
|
||||||
========
|
}
|
||||||
float diffuse = max(0, dot(normal, lightDir));
|
|
||||||
textureColor = texture2D(colorTexture, vtc);
|
|
||||||
vec3 distance = lightColor/(lightPos - worldPos)*(lightPos - worldPos);
|
|
||||||
outputColor = vec3(textureColor) * min(1, AMBIENT + diffuse)* distance;
|
|
||||||
//gamma correction
|
|
||||||
//outputColor = pow(outputColor, vec3(1.0/2.2));
|
|
||||||
|
|
||||||
outputColor = toneMapping(outputColor);
|
|
||||||
outColor = vec4(outputColor , 1.0);
|
|
||||||
>>>>>>>> hdr:grk/cw 6/shaders/shader_5_1_tex.frag
|
|
||||||
}
|
|
@ -50,7 +50,6 @@ GLuint program;
|
|||||||
GLuint programSun;
|
GLuint programSun;
|
||||||
GLuint programDepth;
|
GLuint programDepth;
|
||||||
GLuint programTex;
|
GLuint programTex;
|
||||||
GLuint programTest;
|
|
||||||
|
|
||||||
Core::Shader_Loader shaderLoader;
|
Core::Shader_Loader shaderLoader;
|
||||||
|
|
||||||
@ -66,7 +65,14 @@ GLuint VAO, VBO;
|
|||||||
|
|
||||||
float aspectRatio = 1.77f;
|
float aspectRatio = 1.77f;
|
||||||
|
|
||||||
float aspectRatio = 1.f;
|
unsigned int hdrFBO;
|
||||||
|
unsigned int colorBuffers[2];
|
||||||
|
unsigned int depthMap;
|
||||||
|
unsigned int depthMapFBO;
|
||||||
|
|
||||||
|
|
||||||
|
int HDR_WIDTH = 1024;
|
||||||
|
int HDR_HEIGHT = 1024;
|
||||||
|
|
||||||
glm::vec3 lightColor = glm::vec3(50, 50, 50);
|
glm::vec3 lightColor = glm::vec3(50, 50, 50);
|
||||||
|
|
||||||
@ -170,29 +176,6 @@ void initDepthMap() {
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderShadowapSun(GLFWwindow* window) {
|
|
||||||
int width = 500, height = 500;
|
|
||||||
|
|
||||||
glfwGetWindowSize(window, &width, &height);
|
|
||||||
float time = glfwGetTime();
|
|
||||||
glViewport(0, 0, HDR_WIDTH, HDR_HEIGHT);
|
|
||||||
//uzupelnij o renderowanie glebokosci do tekstury
|
|
||||||
glUseProgram(programDepth);
|
|
||||||
|
|
||||||
//ustawianie przestrzeni rysowania
|
|
||||||
glViewport(0, 0, HDR_WIDTH, HDR_HEIGHT);
|
|
||||||
//bindowanie FBO
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
|
|
||||||
//czyszczenie mapy głębokości
|
|
||||||
glClear(GL_DEPTH_BUFFER_BIT);
|
|
||||||
//ustawianie programu
|
|
||||||
glUseProgram(programDepth);
|
|
||||||
|
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
||||||
//glViewport(0, 0, WIDTH, HEIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void drawObjectTexture(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint texture) {
|
void drawObjectTexture(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint texture) {
|
||||||
glUseProgram(programTex);
|
glUseProgram(programTex);
|
||||||
@ -231,18 +214,6 @@ void drawObjectColor(Core::RenderContext& context, glm::mat4 modelMatrix, glm::v
|
|||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawObjectDepth(Core::RenderContext& context, glm::mat4 viewProjection, glm::mat4 modelMatrix) {
|
|
||||||
glUseProgram(programDepth);
|
|
||||||
|
|
||||||
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
|
||||||
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(programDepth, "viewProjectionMatrix"), 1, GL_FALSE, (float*)&viewProjectionMatrix);
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(programDepth, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
|
|
||||||
Core::DrawContext(context);
|
|
||||||
glUseProgram(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color, float roughness, float metallic) {
|
void drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color, float roughness, float metallic) {
|
||||||
|
|
||||||
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
|
||||||
@ -272,7 +243,7 @@ void drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec
|
|||||||
Core::DrawContext(context);
|
Core::DrawContext(context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void renderScene(GLFWwindow* window)
|
void renderScene(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
@ -280,7 +251,7 @@ void renderScene(GLFWwindow* window)
|
|||||||
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();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
glm::mat4 mercuryScale = glm::scale(glm::vec3(0.24));
|
glm::mat4 mercuryScale = glm::scale(glm::vec3(0.24));
|
||||||
glm::mat4 mercuryRotate = glm::rotate(time * 0.24f, glm::vec3(0, 1, 0));
|
glm::mat4 mercuryRotate = glm::rotate(time * 0.24f, glm::vec3(0, 1, 0));
|
||||||
@ -302,9 +273,9 @@ void renderScene(GLFWwindow* window)
|
|||||||
glm::mat4 marsRotate = glm::rotate(time * 1.8f, glm::vec3(0, 1, 0));
|
glm::mat4 marsRotate = glm::rotate(time * 1.8f, glm::vec3(0, 1, 0));
|
||||||
glm::mat4 marsTranslate = glm::translate(glm::vec3(0, 0, -9));
|
glm::mat4 marsTranslate = glm::translate(glm::vec3(0, 0, -9));
|
||||||
|
|
||||||
glm::mat4 shipScale = glm::scale(glm::vec3(0.3));
|
//glm::mat4 shipScale = glm::scale(glm::vec3(0.3));
|
||||||
glm::mat4 shipRotate = createShipMatrix();
|
//glm::mat4 shipRotate = createShipMatrix();
|
||||||
glm::mat4 shipTranslate = glm::translate(shipPos);
|
//glm::mat4 shipTranslate = glm::translate(shipPos);
|
||||||
|
|
||||||
//glUseProgram(program);
|
//glUseProgram(program);
|
||||||
//glUniform3f(glGetUniformLocation(program, "lightDir"), 1.0, -1.0, 0.0);
|
//glUniform3f(glGetUniformLocation(program, "lightDir"), 1.0, -1.0, 0.0);
|
||||||
@ -313,6 +284,7 @@ void renderScene(GLFWwindow* window)
|
|||||||
//glUniform3f(glGetUniformLocation(program, "lightPos"), 0.0, 0.0, 0.0);
|
//glUniform3f(glGetUniformLocation(program, "lightPos"), 0.0, 0.0, 0.0);
|
||||||
//glUseProgram(0);
|
//glUseProgram(0);
|
||||||
|
|
||||||
|
|
||||||
drawObjectColor(sphereContext, sunScale, glm::vec3(0.9, 0.9, 0.2)); //sun
|
drawObjectColor(sphereContext, sunScale, glm::vec3(0.9, 0.9, 0.2)); //sun
|
||||||
|
|
||||||
drawObjectTexture(sphereContext, mercuryRotate * mercuryTranslate * mercuryScale, texture::mercury); //mercury
|
drawObjectTexture(sphereContext, mercuryRotate * mercuryTranslate * mercuryScale, texture::mercury); //mercury
|
||||||
@ -343,16 +315,6 @@ void renderScene(GLFWwindow* window)
|
|||||||
|
|
||||||
drawObjectTexture(sphereContext, planetTranslate * planetRotate * planetScale, texture::earth);
|
drawObjectTexture(sphereContext, planetTranslate * planetRotate * planetScale, texture::earth);
|
||||||
|
|
||||||
glm::mat4 lightVP = glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f) * glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0));
|
|
||||||
|
|
||||||
drawObjectDepth(sphereContext, lightVP, sunScale);
|
|
||||||
drawObjectDepth(sphereContext, lightVP, mercuryRotate * mercuryTranslate * mercuryScale);
|
|
||||||
drawObjectDepth(sphereContext, lightVP, venusRotate * venusTranslate * venusScale);
|
|
||||||
drawObjectDepth(sphereContext, lightVP, earthRotate * earthTranslate * earthScale);
|
|
||||||
drawObjectDepth(sphereContext, lightVP, marsRotate * marsTranslate * marsScale);
|
|
||||||
drawObjectDepth(sphereContext, lightVP, shipTranslate * shipRotate * shipScale);
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
||||||
glUseProgram(0);
|
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,12 +345,8 @@ void init(GLFWwindow* window)
|
|||||||
|
|
||||||
//initDepthMap();
|
//initDepthMap();
|
||||||
initHDR();
|
initHDR();
|
||||||
program = shaderLoader.CreateProgram("shaders/shader_5_1.vert", "shaders/shader_5_1.frag");
|
|
||||||
programTex = shaderLoader.CreateProgram("shaders/shader_5_1_tex.vert", "shaders/shader_5_1_tex.frag");
|
|
||||||
|
|
||||||
programDepth = shaderLoader.CreateProgram("shaders/shader_smap.vert", "shaders/shader_smap.frag");
|
programDepth = shaderLoader.CreateProgram("shaders/shader_smap.vert", "shaders/shader_smap.frag");
|
||||||
//programTest = shaderLoader.CreateProgram("shaders/test.vert", "shaders/test.frag");
|
|
||||||
programSun = shaderLoader.CreateProgram("shaders/shader_5_sun.vert", "shaders/shader_5_sun.frag");
|
|
||||||
program = shaderLoader.CreateProgram("shaders/shader.vert", "shaders/shader.frag");
|
program = shaderLoader.CreateProgram("shaders/shader.vert", "shaders/shader.frag");
|
||||||
programTex = shaderLoader.CreateProgram("shaders/shader_tex.vert", "shaders/shader_tex.frag");
|
programTex = shaderLoader.CreateProgram("shaders/shader_tex.vert", "shaders/shader_tex.frag");
|
||||||
programSun = shaderLoader.CreateProgram("shaders/shader_sun.vert", "shaders/shader_sun.frag");
|
programSun = shaderLoader.CreateProgram("shaders/shader_sun.vert", "shaders/shader_sun.frag");
|
||||||
@ -410,8 +368,8 @@ void processInput(GLFWwindow* window)
|
|||||||
{
|
{
|
||||||
glm::vec3 cameraSide = glm::normalize(glm::cross(cameraDir, glm::vec3(0.f, 1.f, 0.f)));
|
glm::vec3 cameraSide = glm::normalize(glm::cross(cameraDir, glm::vec3(0.f, 1.f, 0.f)));
|
||||||
|
|
||||||
float angleSpeed = 0.002f;
|
float angleSpeed = 0.02f;
|
||||||
float moveSpeed = 0.004f;
|
float moveSpeed = 0.04f;
|
||||||
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user