我正在尝试创建一个不断旋转的三角形金字塔。我从一个教程示例中获取了一些代码以获得旋转,我认为它正在工作,但是我的图形在z轴上被剪切了。从我在各种教程,论坛等中看到的,openGL的默认z范围为(-1,1)。如何更改此项以显示我的数字的全部范围?
谢谢(这是我的代码)
import pyglet
from pyglet.gl import *
rx = ry = rz = 0
config = Config(sample_buffers=1, samples=4, depth_size=1000, double_buffer=True,)
win = pyglet.window.Window(resizable=True, config=config)
@win.event
def update(dt):
global rx, ry, rz
rx += dt * 1
ry += dt * 80
rz += dt * 30
rx %= 360
ry %= 360
rz %= 360
pyglet.clock.schedule(update)
@win.event
def on_draw():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glTranslatef(200, 200, -4)
glRotatef(rz, 0, 0, 1)
glRotatef(ry, 0, 1, 0)
glRotatef(rx, 1, 0, 0)
glBegin(GL_TRIANGLES)
glVertex3f(-100.0, 0.0, 0.0)
glVertex3f(100.0, 0.0, 0.0)
glVertex3f(0, 200.0, 0.0)
glVertex3f(-100.0, 0.0, 0.0)
glVertex3f(0.0, 0.0, -100.0)
glVertex3f(0.0, 200.0, 0.0)
glVertex3f(100.0, 0.0, 0.0)
glVertex3f(0.0, 0.0, -100.0)
glVertex3f(0.0, 200.0, 0.0)
glVertex3f(-100.0, 0.0, 0.0)
glVertex3f(0.0, 0.0, -100.0)
glVertex3f(100.0, 0.0, 0.0)
glEnd()
glLoadIdentity()
#glTranslatef(1.5, 0.0, -10.0)
pyglet.app.run()
答案 0 :(得分:0)
OpenGL具有Projection和ModelView的矩阵。
您想要的是将投影矩阵从默认矩阵更改为更合适的矩阵。
而不是
glLoadIdentity()
glTranslatef(200, 200, -4)
写
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-1000, 1000, -1000, 1000, -1000, 1000)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(200, 200, -4)
glOrtho(x_min, x_max, y_min, y_max, z_min, z_max)
是最有可能实现的地方。
如果您想要3D投影,请使用gluPerspective