进一步规范PrimitiveComponent/MeshComponent中获取绑定盒的函数名称,并正确渲染OBB。不过没处理旋转。
This commit is contained in:
2
CMCore
2
CMCore
Submodule CMCore updated: 6b97ffdf79...a9e37e6219
Submodule CMSceneGraph updated: 584ac02106...048acfdf45
@@ -1,4 +1,4 @@
|
|||||||
#include<hgl/WorkManager.h>
|
#include<hgl/WorkManager.h>
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/VertexDataManager.h>
|
#include<hgl/graph/VertexDataManager.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
@@ -250,7 +250,13 @@ private:
|
|||||||
{
|
{
|
||||||
CreateComponentInfo cci(GetSceneRoot());
|
CreateComponentInfo cci(GetSceneRoot());
|
||||||
|
|
||||||
//cci.mat=rm_torus->component->GetLocalMatrix()*rm_torus->component->GetMesh()->GetBoundingBox();
|
ParsePrimitiveType
|
||||||
|
OBB obb;
|
||||||
|
rm_torus->component->GetWorldOBB(obb);
|
||||||
|
|
||||||
|
cci.mat=TranslateMatrix(obb.GetCenter()) *
|
||||||
|
obb.GetRotationMatrix() *
|
||||||
|
ScaleMatrix(obb.GetHalfExtend()*2.0f); //*2.0f并不是因为OBB尺寸不对,是因为CUBE的原始尺寸就是1
|
||||||
|
|
||||||
CreateComponent<MeshComponent>(&cci,rm_box->cdp);
|
CreateComponent<MeshComponent>(&cci,rm_box->cdp);
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/component/RenderComponent.h>
|
#include<hgl/component/RenderComponent.h>
|
||||||
#include<hgl/graph/Mesh.h>
|
#include<hgl/graph/Mesh.h>
|
||||||
@@ -101,7 +101,7 @@ public:
|
|||||||
return mcd->mesh;
|
return mcd->mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool GetBoundingBox(AABB &box) const override
|
const bool GetLocalAABB(AABB &box) const override
|
||||||
{
|
{
|
||||||
Mesh *mesh=GetMesh();
|
Mesh *mesh=GetMesh();
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/component/SceneComponent.h>
|
#include<hgl/component/SceneComponent.h>
|
||||||
#include<hgl/graph/AABB.h>
|
#include<hgl/graph/AABB.h>
|
||||||
@@ -18,13 +18,13 @@ public:
|
|||||||
|
|
||||||
virtual ~PrimitiveComponent()=default;
|
virtual ~PrimitiveComponent()=default;
|
||||||
|
|
||||||
virtual const bool GetBoundingBox(AABB &box) const =0;
|
virtual const bool GetLocalAABB(AABB &box) const=0;
|
||||||
|
|
||||||
const bool GetBoundingBox(OBB &box)
|
const bool GetWorldOBB(OBB &box)
|
||||||
{
|
{
|
||||||
AABB aabb;
|
AABB aabb;
|
||||||
|
|
||||||
if(!GetBoundingBox(aabb))
|
if(!GetLocalAABB(aabb))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
box.Set(GetLocalToWorldMatrix(),aabb);
|
box.Set(GetLocalToWorldMatrix(),aabb);
|
||||||
|
Reference in New Issue
Block a user