新增 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