Êtes-vous essayer de trouver quel point 3D sont visibles par une caméra? Si oui, vous trouverez peut-être des informations intéressantes sur ce site: http://www.lighthouse3d.com/opengl/viewfrustum/. Dans l'image suivante, nous pouvons voir la vue tronc et votre tronc de sélection (en rouge). Appliquer les contrôles de visibilité de tronc à votre sélection frustum devrait le même algorithme que celui utilisé pour l'abattage de troncs.
Si vous voulez une solution rapide et non optimisé:
GLdouble model_view[16];
glGetDoublev(GL_MODELVIEW_MATRIX, model_view);
GLdouble projection[16];
glGetDoublev(GL_PROJECTION_MATRIX, projection);
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
for(unsigned i=0; i<points.size(); ++i){
GLdouble winX, winY, winZ;
gluProject(points[i].x, points[i].y, points[i].z, model_view, projection, viewport, &winX, &winY, &winZ);
if(selectionMinX <= winX && winX <= selectionMaxX && selectionMinY <= winY && winY <= selectionMaxY && winZ>=0 && winZ<=1){
/// point is selected
}
}
Nope, je veux juste sélectionner les objets avec la souris. Bien que je puisse l'utiliser à cette fin aussi. Mais le point est que je ne m'inquiète pas si un polygone est partiellement visible, parce que je veux vérifier seulement les positions de point. – Newbie
Mais votre question: trouver les points qui sont sur mon rectangle de sélection est le même que trouver tous les objets à l'intérieur de ma vue frustum, avec la vue tronc étant une * sélection * frustum. – tibur
ouais, je ne peux pas obtenir beaucoup de cet exemple depuis son utilisation des classes dont je ne sais rien. Y at-il une fonction simple n'importe où qui renvoie 1 si son intérieur et 0 si ce n'est pas? Je ne me soucie vraiment pas de la méthode de programmation speeed ou comment high tech sont utilisés. plus simple = le meilleur – Newbie