Added models
This commit is contained in:
parent
4a49e774ec
commit
7ba0db3e0f
35
src/main.cpp
35
src/main.cpp
@ -1,6 +1,7 @@
|
||||
//========== Includes ==========
|
||||
// General includes
|
||||
#include <cstring>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <array>
|
||||
#include <algorithm> // std::clamp
|
||||
@ -16,6 +17,7 @@
|
||||
#include <vector>
|
||||
#include <stdexcept>
|
||||
#include <cstdlib>
|
||||
#include <unordered_map>
|
||||
// Vulkan Includes
|
||||
#include "vulkan/vulkan.hpp"
|
||||
#include <vulkan/vulkan_core.h>
|
||||
@ -32,6 +34,8 @@ import vulkan_hpp;
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#define GLM_ENABLE_EXPERIMENTAL
|
||||
#include <glm/gtx/hash.hpp>
|
||||
#include <chrono>
|
||||
// Images
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
@ -74,6 +78,18 @@ struct Vertex {
|
||||
vk::VertexInputAttributeDescription( 2, 0, vk::Format::eR32G32Sfloat, offsetof(Vertex, texCoord) )
|
||||
};
|
||||
}
|
||||
|
||||
bool operator==(const Vertex& other) const {
|
||||
return pos == other.pos && color == other.color && texCoord == other.texCoord;
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct std::hash<Vertex> {
|
||||
size_t operator() (Vertex const& vertex) const noexcept {
|
||||
return ((hash<glm::vec3>() (vertex.pos) ^
|
||||
(hash<glm::vec3>() (vertex.color) << 1 )) >> 1) ^
|
||||
(hash<glm::vec2>() (vertex.texCoord) << 1 );
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
@ -95,8 +111,6 @@ const std::vector<uint16_t> indices = {
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//Uniform buffer
|
||||
struct UniformBufferObject {
|
||||
glm::mat4 model;
|
||||
@ -832,9 +846,11 @@ class HelloTriangleApplication {
|
||||
throw std::runtime_error(warn + err);
|
||||
}
|
||||
|
||||
std::unordered_map<Vertex, uint32_t> uniqueVertices{};
|
||||
|
||||
for (const auto& shape : shapes) {
|
||||
for (const auto& index : shape.mesh.indices) {
|
||||
Vertex vertex;
|
||||
Vertex vertex{};
|
||||
|
||||
vertex.pos = {
|
||||
attrib.vertices[3 * index.vertex_index + 0],
|
||||
@ -849,13 +865,18 @@ class HelloTriangleApplication {
|
||||
|
||||
vertex.color = {1.0f, 1.0f, 1.0f};
|
||||
|
||||
vertices.push_back(vertex);
|
||||
indices.push_back(indices.size());
|
||||
if (uniqueVertices.count(vertex) == 0) {
|
||||
uniqueVertices[vertex] = static_cast<uint32_t>(vertices.size());
|
||||
vertices.push_back(vertex);
|
||||
}
|
||||
|
||||
indices.push_back(uniqueVertices[vertex]);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
std::cout << "3D model loaded !\n";
|
||||
std::cout << "3D model has " << vertices.size() << " vertices and " << indices.size() << " index \n";
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -896,7 +917,7 @@ class HelloTriangleApplication {
|
||||
vk::raii::Buffer & srcBuffer,
|
||||
vk::raii::Buffer & dstBuffer,
|
||||
vk::DeviceSize size
|
||||
) {
|
||||
){
|
||||
#ifndef NDEBUG
|
||||
std::cout << "Copying buffer " << vk::to_string(srcBuffer.objectType) << " to " << vk::to_string(dstBuffer.objectType) << "...\n";
|
||||
#endif
|
||||
@ -1274,7 +1295,7 @@ class HelloTriangleApplication {
|
||||
float time = std::chrono::duration<float, std::chrono::seconds::period>(currentTime - startTime).count();
|
||||
|
||||
UniformBufferObject ubo {};
|
||||
ubo.model = rotate(glm::mat4(1.0f), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
ubo.model = rotate(glm::mat4(1.0f), time/10 * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
ubo.view = lookAt(glm::vec3(2.0f, 2.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
ubo.proj = glm::perspective(glm::radians(45.0f), static_cast<float>(swapChainExtent.width) / static_cast<float>(swapChainExtent.height), 0.1f, 10.0f);
|
||||
ubo.proj[1][1] *= -1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user