En théorie, glViewport
ne provoque pas d'écrêtage (voir section 10) . Normalement, tout le dessin est coupé à la fenêtre. Puisque vous avez demandé à OpenGL de dessiner dans une région de votre fenêtre, vous devrez également dire à OpenGL de couper les coordonnées en dehors de cette fenêtre. Pour cela, vous aurez besoin de glScissor
. Cependant, certaines implémentations fixent leur dessin à la fenêtre d'affichage (voir mon commentaire pour plus de détails).
De plus, vos calculs sont faux. Votre matrice de projection fait 800 unités de large sur 600 unités de haut, centrée sur (0, 0). Elle est ensuite mise en correspondance avec une partie de la fenêtre de 400 pixels de large sur 300 pixels de haut, dans le coin supérieur droit de la fenêtre.
Si vous tracez une ligne de (-100, -100) à (100, 100), elle ne s'étendra que sur une petite partie de votre frustration visuelle. Le frustrum est dimensionné pour tenir dans la fenêtre d'affichage.
Dans l'image, la boîte bleue est la fenêtre, et la boîte rouge représente la fenêtre de visualisation. La ligne noire doit être la ligne que vous avez dessinée.
Une image décrivant ce que dit le paragraphe. http://img696.imageshack.us/img696/6541/opengl.png
J'espère que cela vous aidera !