Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pyglet中制作3D?_Python_Python 3.x_Opengl_3d_Pyglet - Fatal编程技术网

Python 如何在pyglet中制作3D?

Python 如何在pyglet中制作3D?,python,python-3.x,opengl,3d,pyglet,Python,Python 3.x,Opengl,3d,Pyglet,我试图用OpenGL、Python和pyglet创建一个3D空间中的平面三角形,我在互联网上看到了一些教程,在YouTube上看到了一些视频,最后我在那里写下了这段代码,问题是它没有像我预期的那样工作,我想如果我尝试旋转,我会看到三角形变平,当我走开时,三角形不必缩小吗 import pyglet from pyglet.gl import * config = Config(sample_buffers=1, samples=8) tela = pyglet.window.Window(he

我试图用OpenGL、Python和pyglet创建一个3D空间中的平面三角形,我在互联网上看到了一些教程,在YouTube上看到了一些视频,最后我在那里写下了这段代码,问题是它没有像我预期的那样工作,我想如果我尝试旋转,我会看到三角形变平,当我走开时,三角形不必缩小吗

import pyglet
from pyglet.gl import *

config = Config(sample_buffers=1, samples=8)
tela = pyglet.window.Window(height=500, width=500, config=config)

glViewport(0,0,500,500)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(35,1,0.1,1000)
glMatrixMode(GL_MODELVIEW)

@tela.event
def on_draw():
    glBegin(GL_POLYGON)
    glVertex3f(10,10,0)
    glVertex3f(100,10,0)
    glVertex3f(50,100,0)
    glEnd()
    glFlush()

@tela.event
def on_key_press(s,m):
    tela.clear()
    if s == pyglet.window.key.W:
        glTranslatef(0,0,1)
    if s == pyglet.window.key.S:
        glTranslatef(0,0,-1)
    if s == pyglet.window.key.A:
        glRotatef(1,0,1,0)
    if s == pyglet.window.key.D:
        glRotatef(-1,0,1,0)

pyglet.app.run()
当我运行代码时,会出现以下情况:

当我试着旋转场景时,它发生了:


有人知道我哪里出错了吗?

视口的初始化以及投影和模型视图矩阵的设置是无用的

因为视口和正交投影是在应用程序启动时设置的

见:

[…]pyglet自动在每个窗口上设置视口和正交投影

如果你想使用透视投影

然后三角形将消失,因为它将被透视投影的近平面剪裁(
0.1


要解决此问题,请将透视投影的设置置于
draw
事件:

@tela.event
def on_draw():
影视处
glMatrixMode(GL_投影)
glLoadIdentity()
透视图(90,1,0.1100)
我想如果我试着旋转,我会看到三角形变平,当我离开时,三角形不必变小

import pyglet
from pyglet.gl import *

config = Config(sample_buffers=1, samples=8)
tela = pyglet.window.Window(height=500, width=500, config=config)

glViewport(0,0,500,500)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(35,1,0.1,1000)
glMatrixMode(GL_MODELVIEW)

@tela.event
def on_draw():
    glBegin(GL_POLYGON)
    glVertex3f(10,10,0)
    glVertex3f(100,10,0)
    glVertex3f(50,100,0)
    glEnd()
    glFlush()

@tela.event
def on_key_press(s,m):
    tela.clear()
    if s == pyglet.window.key.W:
        glTranslatef(0,0,1)
    if s == pyglet.window.key.S:
        glTranslatef(0,0,-1)
    if s == pyglet.window.key.A:
        glRotatef(1,0,1,0)
    if s == pyglet.window.key.D:
        glRotatef(-1,0,1,0)

pyglet.app.run()
在视图空间中,x轴从左到右指向,y轴从下到上指向。 要在XY平面中旋转,必须绕Z轴旋转

定义三角形的位置和Y角。Z坐标必须为负,到对象的距离必须介于近平面和远平面之间。如果“近”为0.1,“远”为100,则:


0.1我正试图在y轴上旋转三角形,就好像它是一个旋转的3D对象一样。@Arthurly我明白了,我改变了答案。如何加快速度?帧速率非常低。@BazyliDebowski不使用传统的OpenGL。了解和了解。一个好的教程是
gluPerspective(35,1,0.1,1000)
pos = [0, 0, -20]
rot_y = 0