indices.data(), GL_STATIC_DRAW);\r
\r
glEnableVertexAttribArray(0);\r
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void*)(0));\r
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (void*)(0));\r
glEnableVertexAttribArray(1);\r
- glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void*)(sizeof(float) * 3));\r
+ glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (void*)(sizeof(float) * 3));\r
+ glEnableVertexAttribArray(2);\r
+ glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (void*)(sizeof(float) * 6));\r
\r
glBindVertexArray(0);\r
}\r
\r
const aiScene *scene = importer.ReadFile(\r
filename, aiProcess_CalcTangentSpace | aiProcess_Triangulate |\r
- aiProcess_SortByPType | aiProcess_GenSmoothNormals |\r
- aiProcess_GenUVCoords);\r
+ aiProcess_SortByPType | aiProcess_GenSmoothNormals);\r
\r
model result;\r
\r
- printf("uv channels: %d\n", scene->mMeshes[0]->GetNumUVChannels());\r
-\r
for (int i = 0; i < scene->mMeshes[0]->mNumVertices; i++) {\r
aiVector3D v = scene->mMeshes[0]->mVertices[i];\r
aiVector3D n = scene->mMeshes[0]->mNormals[i];\r
+ aiVector3D t = scene->mMeshes[0]->mTextureCoords[0][i];\r
result.vertices.push_back(v.x * 100);\r
result.vertices.push_back(v.y * 100);\r
result.vertices.push_back(v.z * 100);\r
- result.vertices.push_back(n.x * 100);\r
- result.vertices.push_back(n.y * 100);\r
- result.vertices.push_back(n.z * 100);\r
+ result.vertices.push_back(n.x);\r
+ result.vertices.push_back(n.y);\r
+ result.vertices.push_back(n.z);\r
+ result.vertices.push_back(t.x);\r
+ result.vertices.push_back(t.y);\r
}\r
\r
for (int i = 0; i < scene->mMeshes[0]->mNumFaces; i++) {\r
if (glewInit() != GLEW_OK) {\r
}\r
\r
- GLuint shaderProgramShadowmap = compileShaders("shaders/vert_shadowmap.glsl", "shaders/frag_shadowmap.glsl");\r
- GLuint shaderProgramIrradiance = compileShaders("shaders/vert_irradiance.glsl", "shaders/frag_irradiance.glsl");\r
+ GLuint shaderProgramIrradiance = compileShaders("shaders/ts_vert_irradiance.glsl", "shaders/ts_frag_irradiance.glsl");\r
+ GLuint shaderProgramCombine = compileShaders("shaders/ts_vert.glsl", "shaders/ts_frag.glsl");\r
\r
//model m = loadModel("models/Isotrop-upperjaw.ply");\r
model m = loadModel("models/african_head/african_head.obj");\r
const struct {\r
bool wireframe = false;\r
bool freecam = false;\r
- int renderState = 2;\r
+ int renderState = 1;\r
float color[3] = { 0.7f, 0.4f, 0.4f };\r
- glm::vec3 lightPos = glm::vec3(0.0f, 0.04f, -0.08f);\r
+ glm::vec3 lightPos = glm::vec3(0.0f, 0.0f, 0.25f);\r
float transmittanceScale = 0.005f;\r
float powBase = 2.718;\r
float powFactor = 1;\r
\r
// Render Shadowmap\r
\r
- glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE);\r
- glClampColor(GL_CLAMP_VERTEX_COLOR, GL_FALSE);\r
- glClampColor(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE);\r
-\r
- glBindFramebuffer(GL_FRAMEBUFFER, fb_shadowmap.fbo);\r
+ glBindFramebuffer(GL_FRAMEBUFFER, fb_irradiance.fbo);\r
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);\r
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
glEnable(GL_DEPTH_TEST);\r
else\r
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
\r
- glUseProgram(shaderProgramShadowmap);\r
+ glUseProgram(shaderProgramIrradiance);\r
\r
if (options.freecam)\r
view = freeCam.getViewMatrix();\r
else\r
view = arcCam.getViewMatrix();\r
\r
- lightView = glm::lookAt(options.lightPos, glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));\r
- \r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramShadowmap, "model"),\r
+ glGetUniformLocation(shaderProgramIrradiance, "model"),\r
1, GL_FALSE, glm::value_ptr(model));\r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramShadowmap, "lightView"),\r
- 1, GL_FALSE, glm::value_ptr(lightView));\r
+ glGetUniformLocation(shaderProgramIrradiance, "view"),\r
+ 1, GL_FALSE, glm::value_ptr(view));\r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramShadowmap, "projection"),\r
- 1, GL_FALSE, glm::value_ptr(lightProj));\r
+ glGetUniformLocation(shaderProgramIrradiance, "projection"),\r
+ 1, GL_FALSE, glm::value_ptr(proj));\r
\r
glUniform3fv(\r
- glGetUniformLocation(shaderProgramShadowmap, "lightPos"),\r
+ glGetUniformLocation(shaderProgramIrradiance, "objectColor"),\r
+ 1, options.color);\r
+ glUniform3f(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightColor"),\r
+ 1.0f, 1.0f, 1.0f);\r
+ glUniform3fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightPos"),\r
1, glm::value_ptr(options.lightPos));\r
+ glUniform3fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "viewPos"),\r
+ 1, glm::value_ptr(options.freecam ? freeCam.pos : arcCam.getPos()));\r
\r
m.draw();\r
\r
- // Render irradiance\r
+ \r
\r
- glBindFramebuffer(GL_FRAMEBUFFER, fb_irradiance.fbo);\r
+ // Render fbo to screen\r
+\r
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);\r
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);\r
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
glEnable(GL_DEPTH_TEST);\r
else\r
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
\r
- glUseProgram(shaderProgramIrradiance);\r
+ glUseProgram(shaderProgramCombine);\r
+ \r
+ if (options.freecam)\r
+ view = freeCam.getViewMatrix();\r
+ else\r
+ view = arcCam.getViewMatrix();\r
\r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "model"),\r
+ glGetUniformLocation(shaderProgramCombine, "model"),\r
1, GL_FALSE, glm::value_ptr(model));\r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "view"),\r
+ glGetUniformLocation(shaderProgramCombine, "view"),\r
1, GL_FALSE, glm::value_ptr(view));\r
glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "lightView"),\r
- 1, GL_FALSE, glm::value_ptr(lightView));\r
- glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "lightViewInv"),\r
- 1, GL_FALSE, glm::value_ptr(glm::inverse(lightView)));\r
- glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "projection"),\r
+ glGetUniformLocation(shaderProgramCombine, "projection"),\r
1, GL_FALSE, glm::value_ptr(proj));\r
- glUniformMatrix4fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "lightProjection"),\r
- 1, GL_FALSE, glm::value_ptr(lightProj));\r
- glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "screenWidth"), window.getSize().x);\r
- glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "screenHeight"), window.getSize().y);\r
- glUniform2fv(glGetUniformLocation(shaderProgramIrradiance, "samplePositions"), 13, samplePositions);\r
- glUniform3fv(glGetUniformLocation(shaderProgramIrradiance, "sampleWeights"), 13, sampleWeights);\r
-\r
- glUniform1f(\r
- glGetUniformLocation(shaderProgramIrradiance, "transmittanceScale"),\r
- options.transmittanceScale);\r
- glUniform1i(\r
- glGetUniformLocation(shaderProgramIrradiance, "renderState"),\r
- options.renderState);\r
- glUniform1f(\r
- glGetUniformLocation(shaderProgramIrradiance, "powBase"),\r
- options.powBase);\r
- glUniform1f(\r
- glGetUniformLocation(shaderProgramIrradiance, "powFactor"),\r
- options.powFactor);\r
\r
glUniform3fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "objectColor"),\r
+ glGetUniformLocation(shaderProgramCombine, "objectColor"),\r
1, options.color);\r
glUniform3f(\r
- glGetUniformLocation(shaderProgramIrradiance, "lightColor"),\r
+ glGetUniformLocation(shaderProgramCombine, "lightColor"),\r
1.0f, 1.0f, 1.0f);\r
glUniform3fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "lightPos"),\r
+ glGetUniformLocation(shaderProgramCombine, "lightPos"),\r
1, glm::value_ptr(options.lightPos));\r
glUniform3fv(\r
- glGetUniformLocation(shaderProgramIrradiance, "viewPos"),\r
+ glGetUniformLocation(shaderProgramCombine, "viewPos"),\r
1, glm::value_ptr(options.freecam ? freeCam.pos : arcCam.getPos()));\r
+\r
+ glUniform1i(glGetUniformLocation(shaderProgramCombine, "screenWidth"), window.getSize().x);\r
+ glUniform1i(glGetUniformLocation(shaderProgramCombine, "screenHeight"), window.getSize().y);\r
+ glUniform1i(glGetUniformLocation(shaderProgramCombine, "renderState"), options.renderState);\r
+ glUniform2fv(glGetUniformLocation(shaderProgramCombine, "samplePositions"), 13, samplePositions);\r
+ glUniform3fv(glGetUniformLocation(shaderProgramCombine, "sampleWeights"), 13, sampleWeights);\r
+ glUniform1f(glGetUniformLocation(shaderProgramCombine, "transmittanceScale"), options.transmittanceScale);\r
\r
- glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "shadowmapTexture"), 0);\r
+ glUniform1i(glGetUniformLocation(shaderProgramCombine, "irradianceTexture"), 0);\r
glActiveTexture(GL_TEXTURE0 + 0);\r
- glBindTexture(GL_TEXTURE_2D, fb_shadowmap.renderTexture);\r
+ glBindTexture(GL_TEXTURE_2D, fb_irradiance.renderTexture);\r
+\r
+ // glBindVertexArray(fb_irradiance.screenVAO);\r
+ // glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "shadowmapTexture"), 0);\r
+ // glActiveTexture(GL_TEXTURE0 + 0);\r
+ // glBindTexture(GL_TEXTURE_2D, fb_irradiance.renderTexture);\r
+ // glDrawArrays(GL_TRIANGLES, 0, 6);\r
+ // glBindVertexArray(0);\r
\r
m.draw();\r
\r
- // Render fbo to screen\r
- \r
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
\r
- glBindFramebuffer(GL_FRAMEBUFFER, 0);\r
- glDisable(GL_DEPTH_TEST);\r
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);\r
- glClear(GL_COLOR_BUFFER_BIT);\r
- glUseProgram(fb_irradiance.screenShaderProgram);\r
-\r
- glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "screenWidth"), window.getSize().x);\r
- glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "screenHeight"), window.getSize().y);\r
- glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "renderState"), options.renderState);\r
- glUniform2fv(glGetUniformLocation(fb_irradiance.screenShaderProgram, "samplePositions"), 13, samplePositions);\r
- glUniform3fv(glGetUniformLocation(fb_irradiance.screenShaderProgram, "sampleWeights"), 13, sampleWeights);\r
-\r
- glBindVertexArray(fb_irradiance.screenVAO);\r
- glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "shadowmapTexture"), 0);\r
- glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "irradianceTexture"), 1);\r
- glActiveTexture(GL_TEXTURE0 + 0);\r
- glBindTexture(GL_TEXTURE_2D, fb_shadowmap.renderTexture);\r
- glActiveTexture(GL_TEXTURE0 + 1);\r
- glBindTexture(GL_TEXTURE_2D, fb_irradiance.renderTexture);\r
- glDrawArrays(GL_TRIANGLES, 0, 6);\r
- glBindVertexArray(0);\r
\r
ImGui::SFML::Update(window, deltaClock.restart());\r
\r