新增 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) {
|
||||
};
|
||||
|
||||
//Axis-Aligned Bounding Box),¼ò³Æ AABB
|
||||
//Axis-Aligned Bounding Box),简称 AABB
|
||||
glTFModel::BoundingBox glTFModel::BoundingBox::getAABB(glm::mat4 m) {
|
||||
glm::vec3 min = glm::vec3(m[3]);
|
||||
glm::vec3 max = min;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/// 命名空间宏
|
||||
#define GLTFLOADER_NAMESPACE_BEGIN namespace glTFLoader {
|
||||
|
|
Loading…
Reference in New Issue