新增 gltf包围盒类
parent
be0e1e70bd
commit
e43f2e1aac
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/// 命名空间宏
|
/// 命名空间宏
|
||||||
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
|
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
|
||||||
|
|
Loading…
Reference in New Issue