2017-05-23 4 views
0

저는 현재 PyGame에서 PyOpenGL을 사용하여 하향식 2D 측면 스크롤러 용 코드를 작성하고 있습니다.하나의 2D 이미지를 다른 이미지 위에 오버레이합니까? PyOpenGL?

아래 코드는 창에 2D 이미지를 생성합니다.

추가되는 이미지가 배경입니다. OpenGL을 사용하여 백그라운드에 스프라이트를 추가하고 싶습니다. 다른 말로하면 하나의 2D 이미지를 다른 이미지 위에 겹쳐 놓고 싶습니다. 나는 이것을 할 수있는 좋은 방법을 찾을 수없는 것 같습니다.

import pygame 
from pygame.locals import * 
from OpenGL.GL import * 
from OpenGL.GLU import * 
from screenDictionary import * 

### Initialize variables ### 
gameOn = True 
dispWidth = 1920 
dispHeight = 1024 
bgImg = 'A1_64.png' 
bgImg2 = 'HookedFront64.png' 
transTuple = (255, 0, 255) 
blackTuple = (100, 100, 100) 
screenX = 0 
screenY = 0 

### Initialize display ### 
def createDisplay(dispWidth, dispHeight): 
    pygame.init() 
    screen = pygame.display.set_mode((dispWidth, dispHeight), DOUBLEBUF|OPENGL) 
    pygame.display.set_caption('Hooked') 
    return screen 

def createSurfaces(screen): 
    background = pygame.Surface(screen.get_size()) 
    background.fill(blackTuple) 
    sprite = pygame.Surface(screen.get_size()) 
    sprite.set_colorkey(transTuple) 
    return background 

def loadScene(bgImg): 
    img = pygame.image.load(bgImg) 
    textureData = pygame.image.tostring(img, "RGB", 1) 
    width = img.get_width() 
    height = img.get_height() 
    bgImgGL = glGenTextures(1) 
    glBindTexture(GL_TEXTURE_2D, bgImgGL) 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData) 
    glEnable(GL_TEXTURE_2D) 

def placeScene(): 
    glLoadIdentity() 
    gluPerspective(90, 1, 0.05, 100) 
    glTranslatef(0,0,0) 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
    glBegin(GL_QUADS) 
    glTexCoord2f(0,0) 
    glVertex3f(-4,-4,-4) 
    glTexCoord2f(0,1) 
    glVertex3f(-4,4,-4) 
    glTexCoord2f(1,1) 
    glVertex3f(4,4,-4) 
    glTexCoord2f(1,0) 
    glVertex3f(4,-4,-4) 
    glEnd()  

screen = createDisplay(dispWidth, dispHeight) 
background = createSurfaces(screen) 
mapParams = screenDictionary(screenX, screenY) 
bgImg = mapParams[0] 
loadScene(bgImg) 
loadScene(bgImg2) 
loadScene(bgImg) 

###Run the game### 
while gameOn: 
    placeScene() 
    pygame.display.flip() 
    pygame.time.wait(1) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      gameOn = False 
+0

안녕하세요. 이 [how-to-ask] (http://stackoverflow.com/help/how-to-ask)를 읽고 거기에 나와있는 지침에 따라 프로그래밍을 설명하는 코드 및 오류 메시지와 같은 추가 정보로 질문을 수정하십시오. 문제. – thewaywewere

+0

GL을 왜 사용하고 있습니까? 나는 또한 3D를 위해서만 그렇게했다. 하지만 2D를 원한다고 가정하므로 glVertex2f와 주문 수를 사용할 수 있습니다. – user7185318

+0

하드웨어 가속 기능을 위해 GL을 선택했습니다. OpenGL의 대안을 추천 해 주시겠습니까? –

답변

0

문제가 해결되었습니다.

변경된 사항 : gluPerspective 대신 gluOrtho2D가 사용되었습니다. glVertex3f 대신 glVertex2f를 사용했습니다.

에서 가장 중요한 변화 : 제거 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 이 DUH ... 장면이 실행 된 때마다 삭제되었다! 아직도 OpenGL을 배우고 있지만, 다른 누군가가 저처럼 멍청하고 유사한 문제에 빠지면 여기에 남겨 둘 것입니다.

관련 문제