Hallo,
ich habe mal wieder ein Problem
.
Ich habe 4 große Quader (Cubes) aneinander gesetzt. Die Kamera guckt fast von Vogelperspektive drauf (allerdings mit einem kleinen Winkel). Die Cubes sind so groß, dass man die Kamera so positionieren kann, das nur die Oberfläche eines einzelnen Cubes im Sichtfeld liegt.
In diesem Fall möchte ich die anderen Cubes welche nicht im Sichtfeld liegen, verschieben.
Dazu muss ich also rausfinden ob die Kamera gerade nur einen erfasst oder nicht.
Also habe ich die Cubes in Boxen gelegt:
Code:
bbox[y] = tile[y]->getBoundingBox();
tile[y]->getAbsoluteTransformation().transformBoxEx(bbox[y]);
//tile[y] ist der entsprechende CubeNode
Danach übergebe ich die box und das Frustum an diese Funktion:
Code:
bool CGame::isBoxInView(const core::aabbox3d<f32>& box, const scene::SViewFrustum* view)
{
for (s32 i=0; i < SViewFrustum::VF_PLANE_COUNT; i++)
{
switch (box.classifyPlaneRelation(view->planes[i]))
{
case core::ISREL3D_SPANNING:
return true;
case core::ISREL3D_FRONT:
return false;
}
}
return true;
}
Dummerweise spricht diese Funktion, egal welche Box ich übergebe immer an der selben Stelle an.
Woran könnte das liegen? Oder gibt es eine einfachere Möglichkeit das Problem zu lösen??
Danke Max
EDIT: Mal wieder den Wald vor lauter Bäumen nicht gesehen.
Es geht natürlich einfach, wenn auch nicht ganz so genau, aber für meine Zwecke reicht das.
Code:
core::aabbox3d<f32> box = tile[2]->getTransformedBoundingBox();
if ( pCamera->getViewFrustum()->getBoundingBox().intersectsWithBox(box) )
printf(" tile 2 ");