2010-05-18 4 views
5

Comment faire un rendu de clip en OpenGL (simple rectangle)? Veuillez publier un exemple C++.Comment faire un rendu de clip en OpenGL (C++)

+1

Il est probablement préférable de décrire ce que vous avez essayé, plutôt que de simplement demander par exemple du code. Voici un lien vers le livre rouge OpenGL, qui est gratuit en ligne et contient probablement des informations sur ce que vous cherchez. http://www.glprogramming.com/red/ – Feanor

+0

Merci pour le lien. J'ai joué avec glFrustum, projections etc., mais il y a trop longtemps. Je voudrais recevoir un bon exemple simple d'écrêtage. –

Répondre

2

Si vous voulez uniquement afficher un rectangle spécifique, vous avez besoin d'une combinaison de quelque chose comme glFrustrum ou glOrtho avec glViewPort. C'est en fait le glViewPort qui définit le rectangle de découpage. glFrustrum, glOrtho (gluPerspective, etc.) puis de mapper un ensemble de coordonnées réelles à ce rectangle. Généralement, vous remarquerez à peine le glViewPort, parce qu'il est normalement réglé sur toute la surface de la fenêtre que vous utilisez, et ce que vous changez est le mappage pour obtenir des vues différentes dans la fenêtre.

Si vous ajustez simplement glFrustum (par exemple) par lui-même, la zone d'affichage sur l'écran restera la même, et vous modifierez simplement le mappage afin que vous remplissiez toujours toute la zone de la fenêtre, la caméra virtuelle autour, de sorte que vous faites un zoom avant ou arrière (etc.) sur le "monde" affiché. Inversement, si vous ajustez simplement glViewPort, vous affichez exactement les mêmes données, mais dans un rectangle plus petit. Pour "découper" les données dans le rectangle le plus petit, vous devez ajuster les deux à la fois, dans plus ou moins les directions "opposées" de sorte que votre rectangle de vue-port devienne plus petit, vous zoomez sur votre vue pour compenser .

7

Ce dont vous avez probablement besoin est le mécanisme scissor d'OpenGL.

Il clips rendu de pixels qui ne tombent pas dans un rectangle défini par x, y, width et height paramètres.

Notez également que cet état OpenGL, lorsqu'il est activé, affecte la commande glClear en limitant la zone effacée.

+0

comment empêcher que tous les objets de scène rendus dans le futur soient tronqués par ce rectangle de découpage? En d'autres termes, si vous vouliez simplement appliquer ce rectangle de découpage pour les enfants d'un élément GUI mais que vous souhaitiez ensuite rendre d'autres objets dans la scène, comment empêcheriez-vous que tous les autres objets soient tronqués par ce rectangle? – BigSauce

+0

Je ne sais pas exactement ce que vous voulez dire, mais la pratique courante consiste à séparer le rendu 3D du rendu GUI en utilisant FBO et passe. – Stringer