]> gitweb.ps.run Git - subsurface_scattering/blobdiff - src/main2.cpp
pre cleanup
[subsurface_scattering] / src / main2.cpp
index 24a39cc85510f5b5896a50e236028e4e21cdac90..38ca5f2d7641c4650350394a9a153fd495d1147c 100644 (file)
@@ -97,9 +97,11 @@ private:
                 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
@@ -224,22 +226,22 @@ model loadModel(const std::string &filename) {
 \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
@@ -391,8 +393,8 @@ int main() {
   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
@@ -418,9 +420,9 @@ int main() {
   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
@@ -483,11 +485,7 @@ int main() {
 \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
@@ -497,34 +495,43 @@ int main() {
     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
@@ -534,88 +541,57 @@ int main() {
     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