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