mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-20 10:25:40 +00:00
Polished collision editor UI a bit
This commit is contained in:
14
src/Core/Resource/Collision/CCollidableOBBTree.cpp
Normal file
14
src/Core/Resource/Collision/CCollidableOBBTree.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "CCollidableOBBTree.h"
|
||||
|
||||
void CCollidableOBBTree::BuildRenderData()
|
||||
{
|
||||
if (!mRenderData.IsBuilt())
|
||||
{
|
||||
mRenderData.BuildRenderData(mIndexData);
|
||||
mRenderData.BuildBoundingHierarchyRenderData(mpOBBTree.get());
|
||||
}
|
||||
}
|
||||
|
||||
void CCollidableOBBTree::BuildOBBTree()
|
||||
{
|
||||
}
|
||||
@@ -11,14 +11,9 @@ class CCollidableOBBTree : public CCollisionMesh
|
||||
std::unique_ptr<SOBBTreeNode> mpOBBTree;
|
||||
|
||||
public:
|
||||
virtual void BuildRenderData() override
|
||||
{
|
||||
if (!mRenderData.IsBuilt())
|
||||
{
|
||||
mRenderData.BuildRenderData(mIndexData);
|
||||
mRenderData.BuildBoundingHierarchyRenderData(mpOBBTree.get());
|
||||
}
|
||||
}
|
||||
virtual void BuildRenderData() override;
|
||||
|
||||
void BuildOBBTree();
|
||||
|
||||
/** Accessors */
|
||||
inline SOBBTreeNode* GetOBBTree() const
|
||||
|
||||
@@ -134,7 +134,7 @@ void CCollisionRenderData::BuildBoundingHierarchyRenderData(const SOBBTreeNode*
|
||||
mBoundingIndexBuffer.SetPrimitiveType(GL_LINES);
|
||||
|
||||
// Iterate through the OBB tree, building a list of nodes as we go.
|
||||
// We iterate through this using a breadth-first search in order to group together
|
||||
// We iterate through this using a breadth-first traversal in order to group together
|
||||
// OBBs in the same depth level in the index buffer. This allows us to render a
|
||||
// subset of the bounding hierarchy based on a max depth level.
|
||||
std::vector<const SOBBTreeNode*> TreeNodes;
|
||||
@@ -199,7 +199,7 @@ void CCollisionRenderData::BuildBoundingHierarchyRenderData(const SOBBTreeNode*
|
||||
2, 6,
|
||||
3, 7
|
||||
};
|
||||
uint FirstIndex = mBoundingIndexBuffer.GetSize();
|
||||
uint FirstIndex = mBoundingVertexBuffer.Size() - 8;
|
||||
for (uint i=0; i<24; i++)
|
||||
{
|
||||
mBoundingIndexBuffer.AddIndex(skUnitCubeWireIndices[i] + FirstIndex);
|
||||
@@ -261,3 +261,8 @@ void CCollisionRenderData::RenderBoundingHierarchy(int MaxDepthLevel /*= -1*/)
|
||||
mBoundingIndexBuffer.DrawElements(FirstIndex, NumIndices);
|
||||
mBoundingVertexBuffer.Unbind();
|
||||
}
|
||||
|
||||
int CCollisionRenderData::MaxBoundingHierarchyDepth() const
|
||||
{
|
||||
return mBoundingHierarchyBuilt ? mBoundingDepthOffsets.size()-1 : 0;
|
||||
}
|
||||
|
||||
@@ -49,10 +49,10 @@ public:
|
||||
/** Render */
|
||||
void Render(bool Wireframe, int MaterialIndex = -1);
|
||||
void RenderBoundingHierarchy(int MaxDepthLevel = -1);
|
||||
int MaxBoundingHierarchyDepth() const;
|
||||
|
||||
/** Accessors */
|
||||
inline bool IsBuilt() const { return mBuilt; }
|
||||
inline int MaxBoundingHierarchyDepth() const { return mBoundingHierarchyBuilt ? mBoundingDepthOffsets.size() - 1 : 0; }
|
||||
};
|
||||
|
||||
#endif // CCOLLISIONRENDERDATA_H
|
||||
|
||||
Reference in New Issue
Block a user