diff --git a/data/shaders/conditionalrender/model.vert b/data/shaders/conditionalrender/model.vert index f25f22f5..9be6be0c 100644 --- a/data/shaders/conditionalrender/model.vert +++ b/data/shaders/conditionalrender/model.vert @@ -4,16 +4,19 @@ layout (location = 0) in vec3 inPos; layout (location = 1) in vec3 inNormal; layout (location = 2) in vec3 inColor; -layout (set = 0, binding = 0) uniform UBO -{ +layout (set = 0, binding = 0) uniform UBO { mat4 projection; + mat4 view; mat4 model; } ubo; +layout (set = 1, binding = 0) uniform Node { + mat4 matrix; +} node; + layout(push_constant) uniform PushBlock { - vec4 offset; - vec4 color; -} pushBlock; + vec4 baseColorFactor; +} material; layout (location = 0) out vec3 outNormal; layout (location = 1) out vec3 outColor; @@ -28,14 +31,14 @@ out gl_PerVertex void main() { outNormal = inNormal; - outColor = inColor * pushBlock.color.rgb; - vec4 pos = vec4(inPos + pushBlock.offset.xyz, 1.0); - gl_Position = ubo.projection * ubo.model * pos; + outColor = material.baseColorFactor.rgb; + vec4 pos = vec4(inPos, 1.0); + gl_Position = ubo.projection * ubo.view * ubo.model * node.matrix * pos; - outNormal = mat3(ubo.model) * inNormal; + outNormal = mat3(ubo.view * ubo.model * node.matrix) * inNormal; - vec4 localpos = ubo.model * pos; - vec3 lightPos = vec3(1.0f, -1.0f, 1.0f); + vec4 localpos = ubo.view * ubo.model * node.matrix * pos; + vec3 lightPos = vec3(10.0f, -10.0f, 10.0f); outLightVec = lightPos.xyz - localpos.xyz; outViewVec = -localpos.xyz; } diff --git a/data/shaders/conditionalrender/model.vert.spv b/data/shaders/conditionalrender/model.vert.spv index a0c68596..4ab97f4c 100644 Binary files a/data/shaders/conditionalrender/model.vert.spv and b/data/shaders/conditionalrender/model.vert.spv differ diff --git a/examples/conditionalrender/conditionalrender.cpp b/examples/conditionalrender/conditionalrender.cpp index 3e831fbb..ff3be6ab 100644 --- a/examples/conditionalrender/conditionalrender.cpp +++ b/examples/conditionalrender/conditionalrender.cpp @@ -38,7 +38,8 @@ public: struct { glm::mat4 projection; - glm::mat4 modelview; + glm::mat4 view; + glm::mat4 model; } uboVS; vks::Buffer uniformBuffer; @@ -57,8 +58,8 @@ public: settings.overlay = true; camera.type = Camera::CameraType::lookat; camera.setPerspective(45.0f, (float)width / (float)height, 0.1f, 512.0f); - camera.setRotation(glm::vec3(-9.0f, -55.0f, 0.0f)); - camera.setTranslation(glm::vec3(3.45f, 3.15f, -22.0f)); + camera.setRotation(glm::vec3(-2.25f, -52.0f, 0.0f)); + camera.setTranslation(glm::vec3(1.9f, -2.05f, -18.0f)); camera.rotationSpeed *= 0.25f; /* @@ -267,7 +268,8 @@ public: void updateUniformBuffers() { uboVS.projection = camera.matrices.perspective; - uboVS.modelview = glm::scale(camera.matrices.view, glm::vec3(0.1f , -0.1f, 0.1f)); + uboVS.view = glm::scale(camera.matrices.view, glm::vec3(0.1f , -0.1f, 0.1f)); + uboVS.model = glm::translate(glm::mat4(1.0f), scene.dimensions.min); memcpy(uniformBuffer.mapped, &uboVS, sizeof(uboVS)); } @@ -373,6 +375,7 @@ public: } ImGui::NewLine(); + ImGui::BeginChild("InnerRegion", ImVec2(200.0f, 400.0f), false); for (auto node : scene.linearNodes) { // Add visibility toggle checkboxes for all model nodes with a mesh if (node->mesh) { @@ -381,6 +384,7 @@ public: } } } + ImGui::EndChild(); } }