/// <summary> /// Configura los parámetros de la cámara en funcion del BoundingBox de un modelo /// </summary> /// <param name="boundingBox">BoundingBox en base al cual configurar</param> public void targetObject(TgcBoundingAxisAlignBox boundingBox) { CameraCenter = boundingBox.calculateBoxCenter(); var r = boundingBox.calculateBoxRadius(); CameraDistance = 2 * r; }
/// <summary> /// Hacer visible las meshes de un nodo si es visible por el Frustum /// </summary> private void testChildVisibility(TgcFrustum frustum, QuadtreeNode childNode, float boxLowerX, float boxLowerY, float boxLowerZ, float boxUpperX, float boxUpperY, float boxUpperZ) { //test frustum-box intersection var caja = new TgcBoundingAxisAlignBox( new TGCVector3(boxLowerX, boxLowerY, boxLowerZ), new TGCVector3(boxUpperX, boxUpperY, boxUpperZ)); var distanceToCamera = caja.calculateBoxCenter() - Camera.Position; if (TGCVector3.Length(distanceToCamera) > 10000 + caja.calculateBoxRadius()) { return; } var c = TgcCollisionUtils.classifyFrustumAABB(frustum, caja); //complementamente adentro: cargar todos los hijos directamente, sin testeos if (c == TgcCollisionUtils.FrustumResult.INSIDE) { addAllLeafMeshes(childNode); } //parte adentro: seguir haciendo testeos con hijos else if (c == TgcCollisionUtils.FrustumResult.INTERSECT) { findVisibleMeshes(frustum, childNode, boxLowerX, boxLowerY, boxLowerZ, boxUpperX, boxUpperY, boxUpperZ); } }