在Python中使用OpenGL渲染纹理是不正确的

在Python中使用OpenGL渲染纹理是不正确的,python,opengl,textures,pyopengl,opengl-compat,Python,Opengl,Textures,Pyopengl,Opengl Compat,我想使用以下代码渲染纹理(使用.png): 在我取消注释object\u cube.loadTextures() #使用Python 3执行 导入pygame 随机输入 输入数学 从pygame.locals导入* 从OpenGL.GL导入* 从OpenGL.GLU导入* 摄像机x=0 摄像机z=0 摄像机y=0 x=0 顶点=[ [1, -1, 1], [-1, -1, 1], [-1, -1, -1], [1, -1, -1], [1, 1, -1], [-1, 1, -1], [-1, 1

我想使用以下代码渲染纹理(使用.png):

在我取消注释
object\u cube.loadTextures()

#使用Python 3执行
导入pygame
随机输入
输入数学
从pygame.locals导入*
从OpenGL.GL导入*
从OpenGL.GLU导入*
摄像机x=0
摄像机z=0
摄像机y=0
x=0
顶点=[
[1, -1, 1],
[-1, -1, 1],
[-1, -1, -1],
[1, -1, -1],
[1, 1, -1],
[-1, 1, -1],
[-1, 1, 1],
[1, 1, 1]
]
课程背景:
全球摄像机
定义初始化(自):
self.ground_顶点=(
(-11, -2.01, 20),
(11, -2.01, 20),
(11, -2.01, -300),
(-11, -2.01, -300)
)
def牵引(自):
glPushMatrix()
GLTRANSTEF(0,0,摄像机z)
glBegin(GLU四边形)
对于self.ground_顶点中的顶点:
glColor3fv((0,0.5,0.5))
glVertex3fv(顶点)
格伦德()
GLPOP矩阵()
类多维数据集:
定义初始化(self,v=False):
self.vertices=[
[1, -1, 1],
[-1, -1, 1],
[-1, -1, -1],
[1, -1, -1],
[1, 1, -1],
[-1, 1, -1],
[-1, 1, 1],
[1, 1, 1]
]
self.surfaces=(
(0, 1, 6, 7),
(0, 1, 2, 3),
(0, 3, 4, 7),
(1, 2, 6, 5),
(2, 3, 4, 5),
(4, 5, 6, 7)
)
self.colors=(
(105 / 255, 210 / 255, 231 / 255),
(167 / 255, 219 / 255, 216 / 255),
(224 / 255, 228 / 255, 204 / 255),
(243 / 255, 134 / 255, 48 / 255)
)
self.colors2=(
(0.91, 0.31, 0.47),
(0.84, 0.51, 0.54),
(0.78, 0.64, 0.6),
(0.78, 0.9, 0.85)
)
self.vertices\u纹理=(
(0.0, 0.0),
(1.0, 0.0),
(1.0, 1.0),
(0.0, 1.0),
)
自我评价,自我评价
self.center=[0,0,0]
def牵引(自):
glBegin(GLU四边形)
如果不是self.v:
对于self.surfaces中的曲面:
x=0
对于曲面中的顶点:
glColor3fv(self.colors2[x])
#glTexCoord2f(自顶点纹理[x])
glVertex3fv(自顶点[顶点])
x+=1
其他:
对于self.surfaces中的曲面:
x=0
对于曲面中的顶点:
glColor3fv(self.colors[x])
glTexCoord2fv(自顶点_纹理[x])
glVertex3fv(自顶点[顶点])
x+=1
格伦德()
def设置顶点(自身、最大距离、最小距离=-40):
x_值_变化=random.randrange(-10,10)
y_值_变化=-1
z_值_变化=random.randrange(-1*最大距离,最小距离)
新的_顶点=[]
对于顶点中的顶点:
新的_顶点=[]
新的x=顶点[0]+x值改变
新的y=顶点[1]+y值变化
新的z=顶点[2]+z值变化
新建顶点。追加(新建顶点)
新建顶点。追加(新建顶点)
新建顶点。追加(新建顶点)
新增顶点。追加(新增顶点)
self.vertices=新的顶点
自我中心=[
(self.vertices[2][0]+self.vertices[7][0])/2,
(自顶点[2][1]+自顶点[7][1])/2,
(self.vertices[2][2]+self.vertices[7][2])/2
]
def旋转(自):
glPushMatrix()
glRotatef(25,1,0,0)
GLPOP矩阵()
def loadTexture(自):
textureSurface=pygame.image.load(“./textures/ursa.png”)
textureData=pygame.image.tostring(textureSurface,“RGBA”,1)
宽度=纹理表面。获取宽度()
高度=纹理表面。获取高度()
glEnable(GL_纹理_2D)
texid=glGenTextures(1)
glBindTexture(GL_纹理_2D,texid)
GLTEXAGE2D(GL_纹理_2D,0,GL_RGB,宽度,高度,0,GL_RGBA,GL_无符号字节,textureData)
GLTEX参数F(GL_纹理\u 2D、GL_纹理\u包裹、GL_重复)
GLTEX参数F(GL_纹理\u 2D、GL_纹理\u包裹、GL_重复)
glTexParameterf(GL_纹理2D,GL_纹理MAG_过滤器,GL_最近)
glTexParameterf(GL\u纹理\u 2D,GL\u纹理\u最小\u过滤器,GL\u最近)
#返回texid
def MOV反向(事件):
全球x
y=0
如果event.type==pygame.KEYDOWN:
如果(数学晶圆(x)<11):
如果event.key==pygame.K_左:
x-=1
如果event.key==pygame.K_RIGHT:
x+=1
其他:
如果(x<0):
如果event.key==pygame.K_RIGHT:
x+=1
其他:
如果event.key==pygame.K_左:
x-=1
如果event.key==pygame.K_UP:
y+=1
如果event.key==pygame.K_向下:
y-=1
glTranslatef(0,y,0)
def休假(活动):
如果event.type==pygame.QUIT或(event.type==pygame.KEYDOWN和event.key==K_ESCAPE):
pygame.quit()
退出
def main():
全局摄影机x,摄影机y,摄影机z,x
pygame.init()
显示=(800600)
pygame.display.set_模式(显示,DOUBLEBUF | OPENGL | OPENGLBLIT)
最大距离=300
透视图(45,(显示[0]/显示[1]),0.1,最大距离)
glEnable(GL_深度_测试)
GLTRANSTEF(0,-10/2.4,-50)
地面=地面()
多维数据集=多维数据集(真)
#cube.loadTexture()
#我想在这里渲染纹理,但当我这样做的时候,一切都被搞糟了。
my_cubes=[]
对于范围(50)内的i:
tmp_cube=cube()
#tmp_cube.loadTexture()
#我也尝试在这里渲染,但得到了相同的结果
tmp_立方体。设置_顶点(最大距离)
my_cube.append(tmp_cube)
尽管如此:
对于pygame.event.get()中的事件:
休假(活动)