Archived
1
Fork 0

Add basic lighting

This commit is contained in:
Joshua Goins 2018-10-16 13:03:26 -04:00
parent e28adb0086
commit d92c009fba
5 changed files with 29 additions and 5 deletions

View file

@ -6,7 +6,7 @@
#include <vulkan/vulkan.h>
struct Vertex {
glm::vec3 position;
glm::vec3 position, normal;
};
class Mesh {

View file

@ -1,7 +1,14 @@
#version 460 core
layout(location = 0) in vec3 inFragPos;
layout(location = 1) in vec3 inNormal;
layout(location = 0) out vec4 outColor;
void main() {
outColor = vec4(1.0);
const vec3 norm = normalize(inNormal);
const vec3 lightDir = normalize(vec3(5) - inFragPos);
const float diff = max(dot(norm, lightDir), 0.0);
outColor = vec4(vec3(0.1) + vec3(diff), 1.0);
}

View file

@ -1,6 +1,10 @@
#version 460 core
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inNormal;
layout(location = 0) out vec3 outFragPos;
layout(location = 1) out vec3 outNormal;
layout(push_constant) uniform PushConstants {
mat4 mvp;
@ -8,4 +12,6 @@ layout(push_constant) uniform PushConstants {
void main() {
gl_Position = pushConstants.mvp * vec4(inPosition, 1.0);
outFragPos = inPosition;
outNormal = inNormal;
}

View file

@ -48,7 +48,8 @@ int main(int, char*[]) {
for(unsigned int i = 0; i < m->mNumVertices; i++) {
Vertex vertex;
vertex.position = glm::vec3(m->mVertices[i].x, m->mVertices[i].y, m->mVertices[i].z);
vertex.normal = glm::vec3(m->mNormals[i].x, m->mNormals[i].y, m->mNormals[i].z);
mesh->vertices.push_back(vertex);
}

View file

@ -58,12 +58,22 @@ void WorldPass::createPipeline() {
VkVertexInputAttributeDescription positionAttributeDescription = {};
positionAttributeDescription.format = VK_FORMAT_R32G32B32_SFLOAT;
VkVertexInputAttributeDescription normalAttributeDescription = {};
normalAttributeDescription.location = 1;
normalAttributeDescription.offset = offsetof(Vertex, normal);
normalAttributeDescription.format = VK_FORMAT_R32G32B32_SFLOAT;
const std::array<VkVertexInputAttributeDescription, 2> attributes = {
positionAttributeDescription,
normalAttributeDescription
};
VkPipelineVertexInputStateCreateInfo vertexInputInfo = {};
vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
vertexInputInfo.vertexBindingDescriptionCount = 1;
vertexInputInfo.pVertexBindingDescriptions = &vertexBindingDescription;
vertexInputInfo.vertexAttributeDescriptionCount = 1;
vertexInputInfo.pVertexAttributeDescriptions = &positionAttributeDescription;
vertexInputInfo.vertexAttributeDescriptionCount = attributes.size();
vertexInputInfo.pVertexAttributeDescriptions = attributes.data();
VkPipelineInputAssemblyStateCreateInfo inputAssembly = {};
inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;