更改更合适的宏定义文件名,重构gltfPrimitive
parent
7f3056d2fe
commit
19bb71ee57
|
@ -9,20 +9,26 @@ set(MAIN_FILE
|
||||||
)
|
)
|
||||||
|
|
||||||
set(GLTF_MODEL_LOADER
|
set(GLTF_MODEL_LOADER
|
||||||
|
"${PLUMAGE_RENDER}/glTFModel_Marco.h"
|
||||||
|
"${PLUMAGE_RENDER}/glTFModel_common.h"
|
||||||
"${PLUMAGE_RENDER}/glTFBoundingBox.h"
|
"${PLUMAGE_RENDER}/glTFBoundingBox.h"
|
||||||
"${PLUMAGE_RENDER}/glTFBoundingBox.cpp"
|
"${PLUMAGE_RENDER}/glTFBoundingBox.cpp"
|
||||||
"${PLUMAGE_RENDER}/glTFTexture.h"
|
"${PLUMAGE_RENDER}/glTFTexture.h"
|
||||||
"${PLUMAGE_RENDER}/glTFTexture.cpp"
|
"${PLUMAGE_RENDER}/glTFTexture.cpp"
|
||||||
"render/glTFModel.h"
|
"${PLUMAGE_RENDER}/glTFModel.h"
|
||||||
"render/glTFModel.cpp"
|
"${PLUMAGE_RENDER}/glTFModel.cpp"
|
||||||
)
|
"${PLUMAGE_RENDER}/glTFMaterial.h"
|
||||||
|
"${PLUMAGE_RENDER}/glTFMaterial.cpp"
|
||||||
|
|
||||||
|
"${PLUMAGE_RENDER}/glTFPrimitive.cpp"
|
||||||
|
"render/glTFPrimitive.h")
|
||||||
|
|
||||||
set(VULKAN_BASE
|
set(VULKAN_BASE
|
||||||
"render/VulkanBase_Common.h"
|
"${PLUMAGE_RENDER}/VulkanBase_Marco.h"
|
||||||
"render/VulkanDevice.h"
|
"${PLUMAGE_RENDER}/VulkanDevice.h"
|
||||||
"render/VulkanDevice.cpp"
|
"${PLUMAGE_RENDER}/VulkanDevice.cpp"
|
||||||
"render/VulkanTextureSampler.h"
|
"${PLUMAGE_RENDER}/VulkanTextureSampler.h"
|
||||||
"render/VulkanTextureSampler.cpp"
|
"${PLUMAGE_RENDER}/VulkanTextureSampler.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
# wayland requires additional source files
|
# wayland requires additional source files
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef VULKANDEVICE_H
|
#ifndef VULKANDEVICE_H
|
||||||
#define VULKANDEVICE_H
|
#define VULKANDEVICE_H
|
||||||
|
|
||||||
#include "VulkanBase_Common.h"
|
#include "VulkanBase_Marco.h"
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef VULKANTEXTURESAMPLER_H
|
#ifndef VULKANTEXTURESAMPLER_H
|
||||||
#define VULKANTEXTURESAMPLER_H
|
#define VULKANTEXTURESAMPLER_H
|
||||||
|
|
||||||
#include "VulkanBase_Common.h"
|
#include "VulkanBase_Marco.h"
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
|
|
|
@ -3,49 +3,56 @@
|
||||||
GLTFLOADER_NAMESPACE_BEGIN
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
|
||||||
glTFBoundingBOX::glTFBoundingBOX()
|
glTFBoundingBox::glTFBoundingBox()
|
||||||
: m_isValid(false)
|
: m_isValid(true)
|
||||||
, m_Min(glm::vec3(0,0,0))
|
, m_Min(glm::vec3(0,0,0))
|
||||||
, m_Max(glm::vec3(1,1,1))
|
, m_Max(glm::vec3(1,1,1))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
glTFBoundingBOX::glTFBoundingBOX(glm::vec3 min, glm::vec3 max)
|
glTFBoundingBox::glTFBoundingBox(glm::vec3 min, glm::vec3 max)
|
||||||
: m_isValid(false)
|
: m_isValid(true)
|
||||||
, m_Min(min)
|
, m_Min(min)
|
||||||
, m_Max(max)
|
, m_Max(max)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
glTFBoundingBOX::~glTFBoundingBOX()
|
glTFBoundingBox::~glTFBoundingBox()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
glTFBoundingBOX glTFBoundingBOX::getAABB(glm::mat4 matrix)
|
glTFBoundingBox glTFBoundingBox::getAABB(glm::mat4 matrix)
|
||||||
{
|
{
|
||||||
glm::vec3 min = glm::vec3(matrix[3]);
|
glm::vec3 min = glm::vec3(matrix[3]);
|
||||||
glm::vec3 max = min;
|
glm::vec3 max = min;
|
||||||
glm::vec3 v0, v1;
|
glm::vec3 v0, v1;
|
||||||
|
|
||||||
glm::vec3 right = glm::vec3(matrix[0]);
|
glm::vec3 right = glm::vec3(matrix[0]);
|
||||||
v0 = right * m_Min.x;
|
v0 = right * m_min.x;
|
||||||
v1 = right * m_Max.x;
|
v1 = right * m_max.x;
|
||||||
min += glm::min(v0, v1);
|
min += glm::min(v0, v1);
|
||||||
max += glm::max(v0, v1);
|
max += glm::max(v0, v1);
|
||||||
|
|
||||||
glm::vec3 up = glm::vec3(matrix[1]);
|
glm::vec3 up = glm::vec3(matrix[1]);
|
||||||
v0 = up * m_Min.y;
|
v0 = up * m_min.y;
|
||||||
v1 = up * m_Max.y;
|
v1 = up * m_max.y;
|
||||||
min += glm::min(v0, v1);
|
min += glm::min(v0, v1);
|
||||||
max += glm::max(v0, v1);
|
max += glm::max(v0, v1);
|
||||||
|
|
||||||
glm::vec3 back = glm::vec3(matrix[2]);
|
glm::vec3 back = glm::vec3(matrix[2]);
|
||||||
v0 = back * m_Min.z;
|
v0 = back * m_min.z;
|
||||||
v1 = back * m_Max.z;
|
v1 = back * m_max.z;
|
||||||
min += glm::min(v0, v1);
|
min += glm::min(v0, v1);
|
||||||
max += glm::max(v0, v1);
|
max += glm::max(v0, v1);
|
||||||
|
|
||||||
return glTFBoundingBOX(min, max);
|
return glTFBoundingBox(min, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void glTFBoundingBox::setBoundingBox(glm::vec3 min, glm::vec3 max)
|
||||||
|
{
|
||||||
|
m_min = min;
|
||||||
|
m_max = max;
|
||||||
|
m_isValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,26 @@
|
||||||
#ifndef GLTFBOUNDINGBOX_H
|
#ifndef GLTFBOUNDINGBOX_H
|
||||||
#define GLTFBOUNDINGBOX_H
|
#define GLTFBOUNDINGBOX_H
|
||||||
|
|
||||||
#include "glTFModel_Common.h"
|
#include "glTFModel_Marco.h"
|
||||||
#include <glm/glm.hpp>
|
#include <glm.hpp>
|
||||||
|
|
||||||
GLTFLOADER_NAMESPACE_BEGIN
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
class glTFBoundingBOX
|
class glTFBoundingBox
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
glTFBoundingBOX();
|
glTFBoundingBox();
|
||||||
glTFBoundingBOX(glm::vec3 min, glm::vec3 max);
|
glTFBoundingBox(glm::vec3 min, glm::vec3 max);
|
||||||
~glTFBoundingBOX();
|
~glTFBoundingBox();
|
||||||
|
|
||||||
glTFBoundingBOX getAABB(glm::mat4 matrix);
|
glTFBoundingBox getAABB(glm::mat4 matrix);
|
||||||
|
|
||||||
|
void setBoundingBox(glm::vec3 min, glm::vec3 max);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
glm::vec3 m_Min;
|
glm::vec3 m_min;
|
||||||
glm::vec3 m_Max;
|
glm::vec3 m_max;
|
||||||
bool m_isValid = false;
|
bool m_isValid = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "glTFMaterial.h"
|
||||||
|
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
glTFMaterial::glTFMaterial()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
glTFMaterial::~glTFMaterial()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_END
|
|
@ -0,0 +1,62 @@
|
||||||
|
#ifndef GLTFMATERIAL_H
|
||||||
|
#define GLTFMATERIAL_H
|
||||||
|
|
||||||
|
#include "glTFModel_Marco.h"
|
||||||
|
|
||||||
|
#include "glTFModel_common.h"
|
||||||
|
|
||||||
|
#include "glTFTexture.h"
|
||||||
|
|
||||||
|
#include <glm.hpp>
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
class glTFMaterial
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
glTFMaterial();
|
||||||
|
~glTFMaterial();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
AlphaMode m_alphaMode = ALPHAMODE_OPAQUE;
|
||||||
|
float m_alphaCutoff = 1.0f;
|
||||||
|
float m_metallicFactor = 1.0f;
|
||||||
|
float m_roughnessFactor = 1.0f;
|
||||||
|
glm::vec4 m_baseColorFactor = glm::vec4(1.0f);
|
||||||
|
glm::vec4 m_emissiveFactor = glm::vec4(1.0f);
|
||||||
|
glTFTexture* m_baseColorTexture = nullptr;
|
||||||
|
glTFTexture* m_metallicRoughnessTexture = nullptr;
|
||||||
|
glTFTexture* m_normalTexture = nullptr;
|
||||||
|
glTFTexture* m_occlusionTexture = nullptr;
|
||||||
|
glTFTexture* m_emissiveTexture = nullptr;
|
||||||
|
bool m_doubleSided = false;
|
||||||
|
struct TexCoordSets {
|
||||||
|
uint8_t baseColor = 0;
|
||||||
|
uint8_t metallicRoughness = 0;
|
||||||
|
uint8_t specularGlossiness = 0;
|
||||||
|
uint8_t normal = 0;
|
||||||
|
uint8_t occlusion = 0;
|
||||||
|
uint8_t emissive = 0;
|
||||||
|
} m_texCoordSets;
|
||||||
|
struct Extension {
|
||||||
|
glTFTexture* specularGlossinessTexture = nullptr;
|
||||||
|
glTFTexture* diffuseTexture = nullptr;
|
||||||
|
glm::vec4 diffuseFactor = glm::vec4(1.0f);
|
||||||
|
glm::vec3 specularFactor = glm::vec3(0.0f);
|
||||||
|
} m_extension;
|
||||||
|
struct PbrWorkflows {
|
||||||
|
bool metallicRoughness = true;
|
||||||
|
bool specularGlossiness = false;
|
||||||
|
} m_pbrWorkflows;
|
||||||
|
VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // !GLTFMATERIAL_H
|
|
@ -1,30 +1,22 @@
|
||||||
#pragma once
|
#ifndef GLTFMODEL_COMMON_H
|
||||||
|
#define GLTFMODEL_COMMON_H
|
||||||
|
|
||||||
/// 命名空间宏
|
#include "glTFModel_Marco.h"
|
||||||
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
|
|
||||||
#define GLTFLOADER_NAMESPACE_END }
|
|
||||||
|
|
||||||
/// windows 导入导出宏,GLTFLOADER_EXPORTS将在cmake中定义
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
/// unix-like 下提供符号可见性控制
|
|
||||||
#ifdef GLTFLOADER_STATIC_BUILD
|
enum AlphaMode
|
||||||
#define GLTFLOADER_API
|
{
|
||||||
#define GLTFLOADER_LOCAL
|
ALPHAMODE_OPAQUE,
|
||||||
#else
|
ALPHAMODE_MASK,
|
||||||
#ifdef _WIN32
|
ALPHAMODE_BLEND
|
||||||
#ifdef GLTFLOADER_EXPORTS
|
};
|
||||||
#define GLTFLOADER_API __declspec(dllexport)
|
|
||||||
#define GLTFLOADER_LOCAL
|
|
||||||
#else
|
|
||||||
#define GLTFLOADER_API __declspec(dllimport)
|
GLTFLOADER_NAMESPACE_END
|
||||||
#define GLTFLOADER_LOCAL
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#if __GNUC__ >= 4 || defined(__clang__)
|
|
||||||
#define GLTFLOADER_API __attribute__ ((visibility ("default")))
|
#endif // !GLTFMODEL_COMMON_H
|
||||||
#define GLTFLOADER_LOCAL __attribute__ ((visibility ("hidden")))
|
|
||||||
#else
|
|
||||||
#define GLTFLOADER_API
|
|
||||||
#define GLTFLOADER_LOCAL
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/// 命名空间宏
|
||||||
|
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
|
||||||
|
#define GLTFLOADER_NAMESPACE_END }
|
||||||
|
|
||||||
|
/// windows 导入导出宏,GLTFLOADER_EXPORTS将在cmake中定义
|
||||||
|
/// unix-like 下提供符号可见性控制
|
||||||
|
#ifdef GLTFLOADER_STATIC_BUILD
|
||||||
|
#define GLTFLOADER_API
|
||||||
|
#define GLTFLOADER_LOCAL
|
||||||
|
#else
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifdef GLTFLOADER_EXPORTS
|
||||||
|
#define GLTFLOADER_API __declspec(dllexport)
|
||||||
|
#define GLTFLOADER_LOCAL
|
||||||
|
#else
|
||||||
|
#define GLTFLOADER_API __declspec(dllimport)
|
||||||
|
#define GLTFLOADER_LOCAL
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if __GNUC__ >= 4 || defined(__clang__)
|
||||||
|
#define GLTFLOADER_API __attribute__ ((visibility ("default")))
|
||||||
|
#define GLTFLOADER_LOCAL __attribute__ ((visibility ("hidden")))
|
||||||
|
#else
|
||||||
|
#define GLTFLOADER_API
|
||||||
|
#define GLTFLOADER_LOCAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include "glTFPrimitive.h"
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
glTFPrimitive::glTFPrimitive(uint32_t firstIndex, uint32_t indexCount, uint32_t vertexCount, glTFMaterial& material)
|
||||||
|
:m_firstIndex(firstIndex)
|
||||||
|
,m_indexCount(indexCount)
|
||||||
|
,m_vertexCount(vertexCount)
|
||||||
|
,m_material(material)
|
||||||
|
{
|
||||||
|
m_hasIndices = indexCount > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
glTFPrimitive::~glTFPrimitive()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void glTFPrimitive::setBoundingBox(glm::vec3 min, glm::vec3 max)
|
||||||
|
{
|
||||||
|
m_boundingBox.setBoundingBox(min, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_END
|
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef GLTFPRIMITIVE_H
|
||||||
|
#define GLTFPRIMITIVE_H
|
||||||
|
|
||||||
|
#include "glTFModel_Marco.h"
|
||||||
|
|
||||||
|
#include "glTFMaterial.h"
|
||||||
|
#include "glTFBoundingBox.h"
|
||||||
|
|
||||||
|
#include <glm.hpp>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
class GLTFLOADER_API glTFPrimitive
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
glTFPrimitive(uint32_t firstIndex, uint32_t indexCount, uint32_t vertexCount, glTFMaterial& material);
|
||||||
|
|
||||||
|
~glTFPrimitive();
|
||||||
|
|
||||||
|
void setBoundingBox(glm::vec3 min, glm::vec3 max);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
uint32_t m_firstIndex;
|
||||||
|
uint32_t m_indexCount;
|
||||||
|
uint32_t m_vertexCount;
|
||||||
|
glTFMaterial& m_material;
|
||||||
|
bool m_hasIndices;
|
||||||
|
glTFBoundingBox m_boundingBox;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GLTFLOADER_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // !GLTFPRIMITIVE_H
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef GLTFTEXTURE_H
|
#ifndef GLTFTEXTURE_H
|
||||||
#define GLTFTEXTURE_H
|
#define GLTFTEXTURE_H
|
||||||
|
|
||||||
#include "glTFModel_Common.h"
|
#include "glTFModel_Marco.h"
|
||||||
|
|
||||||
#include "VulkanDevice.h"
|
#include "VulkanDevice.h"
|
||||||
#include "VulkanTextureSampler.h"
|
#include "VulkanTextureSampler.h"
|
||||||
|
|
Loading…
Reference in New Issue