2010-03-09 27 views
1

Je suis extrêmement nouveau à OpenGL. J'écris un programme qui affiche du texte 3D volant à l'écran. J'ai besoin de savoir quand certaines chaînes de texte apparaissent (dessinées) sur l'écran et sont visibles par l'utilisateur. Le programme doit identifier les chaînes de texte affichées. (Note: bien que mon problème concerne le texte, il pourrait être généralisé à n'importe quel objet OpenGL). Au début, j'ai commencé à penser que je pouvais utiliser le mécanisme de sélection d'OpenGL, mais jusqu'à présent, je n'ai vu que des exemples où la zone de sélection est axée sur une sorte d'interaction de l'utilisateur. Je veux savoir quels objets sont affichés sur toute la surface de la fenêtre. Cela m'amène à penser que je suis sur la mauvaise voie ... Ai-je raté quelque chose?Comment déterminez-vous quand un objet est dessiné à l'écran dans OpenGL?

Toutes les suggestions sont les bienvenues.

Répondre

0

hmm, est-ce réellement 3D? ou est-ce juste du texte 2D sur l'écran dans l'espace 2D? dans ce cas, je voudrais juste le suivre manuellement. comment dessinez-vous exactement votre texte?

Généralement la façon dont vous faites ceci est avec un "contrôle de frustum" où vous faites simplement juste un volume pour l'appareil-photo et testez si vous êtes des objets 3d sont dedans ou pas.

0

Vous pouvez essayer le mécanisme d'OpenGL. Dans ce mode, OpenGL génère des fragments et les transmet à un tampon de feedback. Si quelque chose est coupé, aucun fragment ne sera généré. Lorsque le texte devient visible, vous trouverez le fragment correspondant dans le fragment buffer.

Cette link devrait vous aider à démarrer.

Voici un autre lien, le Question 10.010 semble particulièrement pertinent à ce que vous voulez.

+0

La rétroaction n'est-elle pas obsolète dans les derniers GL révolutions? – genpfault

+1

Oui. C'est obsolète. OpenGL shader peut maintenant "exporter" toute information sur la géométrie, en effet glFeedback n'est plus nécessaire. – Luca

0

Exécutez les coordonnées de votre objet via votre projection and modelview matrices pour obtenir les coordonnées de l'espace écran. Comparez la sortie X/Y à l'étendue de votre écran pour déterminer si le texte est à l'écran.

2

Vous pouvez utiliser les objets de requête (en particulier ceux créés à l'aide de GL_ARB_occlusion_query extension Specification). Ces objets sont utilisés pour interroger combien de fragments sont rendus en utilisant une séquence d'opérations OpenGL (begin/end, etc ...).

Un autre système (logiciel uniquement), est de déterminer un cadre de sélection pour votre texte rendu, puis calculer mathématiquement si la zone de délimitation est à l'intérieur du tronc de vue (dérivée du point de vue courant utilisé pour le rendu.

Une note:. utilisant OpenGL picking n'implique pas nécessairement l'utilisation de gluPickMatrix vous pouvez vous rendre la scène « comme il est », et la requête les noms rendus (picking altought est obsolète à partir OpenGL 3)

objets de requête. sont faciles à utiliser, et ils sont légers.La cueillette est une autre bonne solution pour la plupart du matériel, mais plus schématique que les objets de requête.