为什么这个八边形不适合 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)
您现在可以看到您的八角形了
我正在尝试创建一个八边形:
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)
您现在可以看到您的八角形了