mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-26 16:07:31 +01:00
Fix: Make CBillboardSceneNode bounding-box large enough to fit the billboard inside.
It still won't work yet for scaled boundingboxes (or parents being scaled). But at least it's now large enough for typical unscaled boundingboxes. Before it was always too small - even for the simplest quadratic billboard case seen without rotation. Now it's always a bit too large, but that's way less of a problem (collisions still work and culling simply happens a bit less often, but not too often which is way worse) git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6431 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
3cf75cdce4
commit
2bff147904
@ -141,7 +141,7 @@ void CBillboardSceneNode::updateMesh(const irr::scene::ICameraSceneNode* camera)
|
|||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
const core::aabbox3d<f32>& CBillboardSceneNode::getBoundingBox() const
|
const core::aabbox3d<f32>& CBillboardSceneNode::getBoundingBox() const
|
||||||
{
|
{
|
||||||
// Really wrong when scaled.
|
// Really wrong when scaled (as the node does not scale it's vertices - maybe it should?)
|
||||||
return BBoxSafe;
|
return BBoxSafe;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,9 +162,9 @@ void CBillboardSceneNode::setSize(const core::dimension2d<f32>& size)
|
|||||||
if (core::equals(Size.Height, 0.0f))
|
if (core::equals(Size.Height, 0.0f))
|
||||||
Size.Height = 1.0f;
|
Size.Height = 1.0f;
|
||||||
|
|
||||||
const f32 avg = (Size.Width + Size.Height)/6;
|
const f32 extent = 0.5f*sqrt(Size.Width*Size.Width + Size.Height*Size.Height);
|
||||||
BBoxSafe.MinEdge.set(-avg,-avg,-avg);
|
BBoxSafe.MinEdge.set(-extent,-extent,-extent);
|
||||||
BBoxSafe.MaxEdge.set(avg,avg,avg);
|
BBoxSafe.MaxEdge.set(extent,extent,extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -182,9 +182,9 @@ void CBillboardSceneNode::setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWi
|
|||||||
TopEdgeWidth = 1.0f;
|
TopEdgeWidth = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
const f32 avg = (core::max_(Size.Width,TopEdgeWidth) + Size.Height)/6;
|
const f32 extent = 0.5f*sqrt(Size.Width*Size.Width + Size.Height*Size.Height);
|
||||||
BBoxSafe.MinEdge.set(-avg,-avg,-avg);
|
BBoxSafe.MinEdge.set(-extent,-extent,-extent);
|
||||||
BBoxSafe.MaxEdge.set(avg,avg,avg);
|
BBoxSafe.MaxEdge.set(extent,extent,extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user