Python PyOpenGL numpy纹理显示为纯色

Python PyOpenGL numpy纹理显示为纯色,python,numpy,opengl,pygame,pyopengl,Python,Numpy,Opengl,Pygame,Pyopengl,我正在尝试将numpy数组设置为pygame中的OpenGl纹理。问题是,只有第一个像素作为纹理数据,而不是随机图案(例如),我每次只得到一个随机颜色 import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import * import numpy as np #Settings width = 200 height = 300 resolution = (800,600) tex

我正在尝试将numpy数组设置为pygame中的OpenGl纹理。问题是,只有第一个像素作为纹理数据,而不是随机图案(例如),我每次只得到一个随机颜色

import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

import numpy as np

#Settings
width = 200
height = 300
resolution = (800,600)
texture_data = np.random.randint(256,size=(height, width, 3))

#pygame init
pygame.init()
gameDisplay = pygame.display.set_mode(resolution,OPENGL)

#OpenGL init
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0,resolution[0],0,resolution[1],-1,1)
glMatrixMode(GL_MODELVIEW)
glDisable(GL_DEPTH_TEST)
glClearColor(0.0,0.0,0.0,0.0)
glEnable(GL_TEXTURE_2D)

#Set texture
texture = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glBindTexture(GL_TEXTURE_2D, texture)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_data)
glGenerateMipmap(GL_TEXTURE_2D)

glActiveTexture(GL_TEXTURE0)

#Clean start
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()

#draw rectangle
glTranslatef(300,200,0)
glBegin(GL_QUADS)
glVertex2f(0,0)
glVertex2f(0,height)
glVertex2f(width,height)
glVertex2f(width,0)
glEnd()
glFlush()

#game loop until exit
gameExit = False
while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

    #throttle
    pygame.time.wait(100)

正如genpfault所指出的,我缺少纹理坐标。我需要将它们添加到矩形绘图部分

#draw rectangle
glTranslatef(300,200,0)
glBegin(GL_QUADS)

glTexCoord(0,0)
glVertex2f(0,0)

glTexCoord(0,1)
glVertex2f(0,height)

glTexCoord(1,1)
glVertex2f(width,height)

glTexCoord(1,0)
glVertex2f(width,0)

glEnd()
glFlush()
如果您对纹理贴图的工作原理一无所知,请阅读以下内容:


纹理坐标在哪里?现在,您只在管道中发送顶点。非常感谢。现在我知道我错过了什么,我环顾四周后发现了。