为什么这个八角形不适合窗户?

2024-05-20 14:10:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个八角形:

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()

一切似乎都很好。但当我运行此代码时,我看到以下输出: . 你知道我该怎么修吗


Tags: fromimportselfinitondefargswindow
2条回答

大部分八角形都不在视口中。默认情况下,视口的左下角坐标为(-1,-1),右上角坐标为(1,1)。
可以通过^{}设置正交投影矩阵以更改投影面积(分别为体积):

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)

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

相关问题 更多 >