2017-04-18 10 views
0

pygameでnumpy配列をOpenGlテクスチャとして設定しようとしています。問題は、最初のピクセルだけがテクスチャデータとして取り込まれ、ランダムパターンの代わりに(たとえば)私はたびにランダムな色しか取得しないということです。PyOpenGL numpyのテクスチャが無地の色で表示されます

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) 
+3

をどこテクスチャ座標はありますか?今は、頂点をパイプラインの下に送るだけです。 – genpfault

+0

ありがとうございました。私が逃していたことを知ったので、少し調べてみました。 –

答えて

0

私はテクスチャ座標がありませんでした。私はそれらを矩形描画部分に追加する必要がありました。

#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() 

あなたは、テクスチャマッピングがどのように機能するかに失われた場合は、これを読む:

OpenGL Programming Guide - Chapter 9 Texture Mapping

関連する問題