diff --git a/Crafter.Graphics-Camera.cpp b/Crafter.Graphics-Camera.cpp index 33c6d70..504a91d 100644 --- a/Crafter.Graphics-Camera.cpp +++ b/Crafter.Graphics-Camera.cpp @@ -3,13 +3,19 @@ module; #include #include "VulkanBuffer.h" #include +#include +#include module Crafter.Graphics; import Crafter.Math; using namespace Crafter; Camera::Camera(float fov, float aspectRatio, float near, float far) { - projection = Matrix::Projection(fov, aspectRatio, near, far); - view = Matrix::Idenity(); - projectionView = camera.matrices.perspective*camera.matrices.view; + projection = MatrixRowMajor::Perspective(fov, aspectRatio, near, far); + view = MatrixRowMajor::Rotation(0, 0, ToRadian(180.0f))*MatrixRowMajor::Translation(1.0f, 0.0f, -10.0f); + Update(); +} + +void Camera::Update() { + projectionView = projection*view; } \ No newline at end of file diff --git a/Crafter.Graphics-Camera.cppm b/Crafter.Graphics-Camera.cppm index 06ccf6b..104103e 100644 --- a/Crafter.Graphics-Camera.cppm +++ b/Crafter.Graphics-Camera.cppm @@ -10,9 +10,10 @@ import Crafter.Math; namespace Crafter { export class Camera : public Component { public: - Matrix projection; - Matrix view; - Matrix projectionView; + MatrixRowMajor projection; + MatrixRowMajor view; + MatrixRowMajor projectionView; Camera(float fov, float aspectRatio, float near, float far); + void Update(); }; } diff --git a/Crafter.Graphics-MeshShader.cppm b/Crafter.Graphics-MeshShader.cppm index 6c9b57d..079a273 100644 --- a/Crafter.Graphics-MeshShader.cppm +++ b/Crafter.Graphics-MeshShader.cppm @@ -11,19 +11,19 @@ import Crafter.Component; import :Mesh; import :Camera; import :VulkanPipeline; - +import Crafter.Math; namespace Crafter { export template class MeshShader { public: - //glm::mat4 transform; + MatrixRowMajor transform; ComponentRefOwning> mesh; ComponentRefOwning camera; - Buffer mvp; + Buffer> mvp; std::uint32_t threadCount; MeshShader(Mesh* mesh, Camera* camera) : threadCount(std::ceil(static_cast(mesh->indexCount)/64/3)), mvp(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT), mesh(mesh), camera(camera) { - + transform = MatrixRowMajor::Identity(); } void WriteDescriptors(DescriptorSet& set) { set.Write(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &mvp.descriptor); @@ -31,7 +31,7 @@ namespace Crafter { set.Write(0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2, &mesh.component->indicies.descriptor); } void Update() { - //mvp.value[0] = camera.component->projectionView*transform; + *mvp.value = camera.component->projectionView*transform; } }; } diff --git a/main.cpp b/main.cpp index 3c75ade..b89b802 100644 --- a/main.cpp +++ b/main.cpp @@ -2,16 +2,10 @@ #include #include #include -#define GLM_FORCE_RADIANS -#define GLM_FORCE_DEPTH_ZERO_TO_ONE -#define GLM_ENABLE_EXPERIMENTAL -#include -#include -#include -#include import Crafter.Graphics; import Crafter.Asset; import Crafter.Event; +import Crafter.Math; using namespace Crafter; typedef VulkanShader<"MeshShaderXYZUV.spirv", "main", VK_SHADER_STAGE_MESH_BIT_EXT, 3, {{{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2}}}> MeshVulkanShader; @@ -29,14 +23,14 @@ int main() { Asset asset; asset.LoadFull("cannon.cras"); - Camera camera; + Camera camera(1.57079633, 16 / 9, 0.01, 512); + camera.Update(); Mesh* mesh = Mesh::FromAssetUV(asset.entries[0].data.data()); DescriptorSet descriptors; Pipeline::GetDescriptorSet(descriptors); MeshShader meshShader(mesh, &camera); meshShader.WriteDescriptors(descriptors); - meshShader.transform = glm::mat4(1.0f); meshShader.Update(); Asset asset2;