void QModelNode::activate() { float minX, minY, minZ, maxX, maxY, maxZ; h3dGetNodeAABB(m_hordeID, &minX, &minY, &minZ, &maxX, &maxY, &maxZ); unsigned int cameraID = HordeSceneEditor::instance()->glContext()->activeCam(); float leftPlane = h3dGetNodeParamF(cameraID, H3DCamera::LeftPlaneF, 0 ); float rightPlane = h3dGetNodeParamF(cameraID, H3DCamera::RightPlaneF, 0); float bottomPlane = h3dGetNodeParamF(cameraID, H3DCamera::BottomPlaneF, 0); float topPlane = h3dGetNodeParamF(cameraID, H3DCamera::TopPlaneF, 0); float nearPlane = h3dGetNodeParamF(cameraID, H3DCamera::NearPlaneF, 0); const float* camera = 0; H3DNode parentNode = h3dGetNodeParent(cameraID); h3dGetNodeTransMats(parentNode, 0, &camera); if ( !camera ) return; /** * (maxX - minX) = width of the bounding box * rightPlane / (rightPlane - leftPlane) = right fraction of the viewing frustum */ float offsetX = (maxX - minX) * rightPlane / (rightPlane - leftPlane); float offsetY = (maxY - minY) * topPlane / (topPlane - bottomPlane); QMatrix4f newCamTrans = QMatrix4f::TransMat(maxX - offsetX, maxY - offsetY, maxZ); newCamTrans.translate(0, 0, qMax(nearPlane * offsetX / rightPlane, nearPlane * offsetY / topPlane)); h3dSetNodeTransMat(cameraID, (QMatrix4f(camera).inverted() * newCamTrans).x); }
void SceneGraphComponent::getBoundingBox(float* minX, float* minY, float* minZ, float* maxX, float* maxY, float* maxZ) { h3dGetNodeAABB(hordeId(), minX, minY, minZ, maxX, maxY, maxZ); }