为什么这个八边形不适合 window?

Why this octagon doesn't fit window?

我正在尝试创建一个八边形:

import pyglet
from pyglet.gl import *

class mywindow(pyglet.window.Window):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.set_minimum_size(300,300)

    def on_draw(self):


        self.clear()    
        glBegin(GL_POLYGON)
        glColor3ub(255,0,0)
        glVertex2f(0,0)
        glVertex2f(1.0,0)
        glVertex2f(1.5,0.5)
        glVertex2f(1.5,1.5)
        glVertex2f(1.0,2.0)
        glVertex2f(0,2.0)
        glVertex2f(-0.5,1.5)
        glVertex2f(-0.5,0.5)
        glEnd()

    def on_resize(self, width, height):
        glViewport(10,10, width, height)
window = mywindow(300,300,"deneme",True)
pyglet.app.run()

一切似乎都很好。但是当我 运行 这段代码时,我看到了这个输出: 知道我该如何解决吗?

大部分八边形都在视口之外。默认情况下,视口的左下角坐标为 (-1, -1),右上角坐标为 (1, 1)。
您可以设置正交投影矩阵,通过 glOrtho:

更改投影面积(分别为体积)
class mywindow(pyglet.window.Window):
    # [...]

    def on_resize(self, width, height):
        glViewport(0, 0, width, height)
       
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(-3, 3, -3, 3, -1, 1)

        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()

您的多边形太大了! 通过将坐标除以 10 :

        glVertex2f(0,0)
        glVertex2f(0.1,0)
        glVertex2f(0.15,0.05)
        glVertex2f(0.15,.15)
        glVertex2f(0.1,.2)
        glVertex2f(0,0.2)
        glVertex2f(-0.05,0.15)
        glVertex2f(-0.05,0.05)

您现在可以看到您的八角形了