Compare commits

...

2 Commits

Author SHA1 Message Date
InkSoul e43f2e1aac 新增 gltf包围盒类 2025-03-30 23:15:17 +08:00
InkSoul be0e1e70bd 新增 命名空间和动态库控制宏 2025-03-30 23:13:04 +08:00
6 changed files with 141 additions and 3 deletions

View File

@ -8,6 +8,11 @@ set(MAIN_FILE
${PLUMAGE_RENDER}/render.cpp ${PLUMAGE_RENDER}/render.cpp
) )
set(GLTF_MODEL_LOADER
"${PLUMAGE_RENDER}/glTFBoundingBox.h"
"${PLUMAGE_RENDER}/glTFBoundingBox.cpp"
)
# wayland requires additional source files # wayland requires additional source files
IF(USE_WAYLAND_WSI) IF(USE_WAYLAND_WSI)
SET(SOURCE ${SOURCE} ${CMAKE_BINARY_DIR}/xdg-shell-client-protocol.h ${CMAKE_BINARY_DIR}/xdg-shell-protocol.c ) SET(SOURCE ${SOURCE} ${CMAKE_BINARY_DIR}/xdg-shell-client-protocol.h ${CMAKE_BINARY_DIR}/xdg-shell-protocol.c )
@ -37,10 +42,11 @@ include_directories(${lib_base_path})
if(WIN32) if(WIN32)
add_executable(${RenderName} WIN32 ${SHADERS_GLSL} ${SHADERS_HLSL} add_executable(${RenderName} WIN32 ${SHADERS_GLSL} ${SHADERS_HLSL}
${MAIN_FILE} ${MAIN_FILE}
${GLTF_MODEL_LOADER}
"render/glTFModel.h" "render/glTFModel.h"
"render/glTFModel.cpp" "render/glTFModel.cpp"
"render/renderFoundation.h" "render/renderFoundation.h"
"render/renderFoundation.cpp") "render/renderFoundation.cpp" )
target_link_libraries(${RenderName} base ${Vulkan_LIBRARY} ${WINLIBS}) target_link_libraries(${RenderName} base ${Vulkan_LIBRARY} ${WINLIBS})
endif() endif()
set_target_properties(${RenderName} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) set_target_properties(${RenderName} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
@ -51,6 +57,12 @@ if(RESOURCE_INSTALL_DIR)
endif() endif()
#if(WIN32)
# target_compile_definitions(MyLib PRIVATE MYLIB_EXPORTS)
#endif(UNIX AND NOT APPLE) # Linux
# add_compile_options(-fvisibility=hidden)
# add_compile_options(-fvisibility-inlines-hidden)
#endif()

View File

@ -0,0 +1,52 @@
#include "glTFBoundingBox.h"
GLTFLOADER_NAMESPACE_BEGIN
glTFBoundingBOX::glTFBoundingBOX()
: m_isValid(false)
, m_Min(glm::vec3(0,0,0))
, m_Max(glm::vec3(1,1,1))
{
}
glTFBoundingBOX::glTFBoundingBOX(glm::vec3 min, glm::vec3 max)
: m_isValid(false)
, m_Min(min)
, m_Max(max)
{
}
glTFBoundingBOX::~glTFBoundingBOX()
{
}
glTFBoundingBOX glTFBoundingBOX::getAABB(glm::mat4 matrix)
{
glm::vec3 min = glm::vec3(matrix[3]);
glm::vec3 max = min;
glm::vec3 v0, v1;
glm::vec3 right = glm::vec3(matrix[0]);
v0 = right * m_Min.x;
v1 = right * m_Max.x;
min += glm::min(v0, v1);
max += glm::max(v0, v1);
glm::vec3 up = glm::vec3(matrix[1]);
v0 = up * m_Min.y;
v1 = up * m_Max.y;
min += glm::min(v0, v1);
max += glm::max(v0, v1);
glm::vec3 back = glm::vec3(matrix[2]);
v0 = back * m_Min.z;
v1 = back * m_Max.z;
min += glm::min(v0, v1);
max += glm::max(v0, v1);
return glTFBoundingBOX(min, max);
}
GLTFLOADER_NAMESPACE_END

View File

@ -0,0 +1,44 @@
#ifndef GLTFBOUNDINGBOX_H
#define GLTFBOUNDINGBOX_H
#include "glTFModel_Common.h"
#include <glm/glm.hpp>
GLTFLOADER_NAMESPACE_BEGIN
class glTFBoundingBOX
{
public:
glTFBoundingBOX();
glTFBoundingBOX(glm::vec3 min, glm::vec3 max);
~glTFBoundingBOX();
glTFBoundingBOX getAABB(glm::mat4 matrix);
private:
glm::vec3 m_Min;
glm::vec3 m_Max;
bool m_isValid = false;
};
GLTFLOADER_NAMESPACE_END
#endif // !GLTFBOUNDINGBOX_H

View File

@ -29,7 +29,7 @@
glTFModel::BoundingBox::BoundingBox(glm::vec3 min, glm::vec3 max) : min(min), max(max) { glTFModel::BoundingBox::BoundingBox(glm::vec3 min, glm::vec3 max) : min(min), max(max) {
}; };
//Axis-Aligned Bounding Box),¼ò³Æ AABB //Axis-Aligned Bounding Box),简称 AABB
glTFModel::BoundingBox glTFModel::BoundingBox::getAABB(glm::mat4 m) { glTFModel::BoundingBox glTFModel::BoundingBox::getAABB(glm::mat4 m) {
glm::vec3 min = glm::vec3(m[3]); glm::vec3 min = glm::vec3(m[3]);
glm::vec3 max = min; glm::vec3 max = min;

View File

@ -1,4 +1,4 @@
#pragma once #pragma once
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>

View File

@ -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