2012-05-22 4 views
1

다음은이 작업입니다. 그림을 전체 뷰포트에 채워진 배경으로로드하려고합니다. 이 배경은 카메라가 향하는 위치에 관계없이 항상 카메라를 향해야합니다. 먼저 나는 자연스럽게 배경으로 텍스처를 사용할 생각, 내 코드는 다음과 같습니다 :glDrawPixels를 사용하여 그림을 배경으로 렌더링하는 방법

glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
glLoadIdentity(); 
glOrtho(0,1,0,1,0,1); 
glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glLoadIdentity(); 

glBindTexture(GL_TEXTURE_2D, myimage.GetID()); 
glEnable(GL_TEXTURE_2D); 

glBegin(GL_QUADS); 
glTexCoord2f(0, 0); glVertex2f(0, 0); 
glTexCoord2f(1, 0); glVertex2f(1, 0); 
glTexCoord2f(1, 1); glVertex2f(1, 1); 
glTexCoord2f(0, 1); glVertex2f(0, 1); 
glEnd(); 

glMatrixMode(GL_PROJECTION); 
glPopMatrix(); 
glMatrixMode(GL_MODELVIEW); 
glPopMatrix(); 
glDisable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, 0); 

이 날 믿어, myimage을 텍스처로 사진을로드 할 수있는 C 화상 클래스는 잘 작동합니다. 그러나 알 수없는 이유로 응용 프로그램에서 직사각형에 텍스처를로드 할 수 없습니다. (나는이 문제를 여기에 설명했다 click) 결과적으로, 나는 단지 내 뷰포트 주위에 사각형 프레임을 볼 수있다.

그래서 다른 해결책을 찾아 냈습니다.

텍스처 대신 glDrawPixels를 사용합니다. 내 코드는 다음과 같습니다.

glRasterPos2i(0, 0); 
glDrawPixels(myimage.GetWidth(), myimage.GetHeight(), (myimage.GetBPP() == 24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE, 
    myimage.GetData()); 

사진이 등장했습니다! 그러나, 사진은 항상 내 카메라를 직면하지 않았다. 특정 방향으로 만 나타납니다. 장면의 물체처럼 카메라의 배경이 항상 보이지는 않습니다.

아무도 glDrawPixels를 사용하여 백그라운드를 구현하는 방법을 알고 있습니까?

그런데이 배경은 3D 장면에 배치 된 물체가 아니라고 생각합니다. 그래서 빌보드가 내 솔루션이 아닐 수도 있습니다. 다시 말하지만,이 배경은 전체 뷰 포트에 채워지고 항상 카메라를 향하고 있습니다.

+0

로드하는 사진의 너비/높이는 얼마입니까? – Ani

+0

'glDrawPixels'는 현재의 래스터 위치 (일반적인 변환 파이프 라인의 영향을받습니다)를 사용하려고합니다. 그러나 무엇이든간에, 텍스처가있는 쿼드 대신에'glDrawPixels'을 사용하지 마십시오. 오히려 ananthonline이 암시하는 것처럼 텍스처링 코드를 수정하십시오. –

답변

4

텍스처가로드되지 않는 이유 중 하나는 2의 2의 비중을 가질 수 없기 때문입니다. 정사각형 256x256 텍스처 (또는 이와 유사한 것)를 사용해 이것이 문제인지 확인하십시오. Rectangle Textures에 대한 자세한 내용은 여기를 참조하십시오.

당신의 배경 문제로 돌아 오는 -이 작업을 수행 할 수있는 올바른 방법을 전체 화면을 채우고 직교 투영/뷰포트를 설정

  1. 하는 것입니다.

    glViewport(0,0,nw,nh); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0,1,0,1,0,1); 
    glMatrixMode(GL_MODELVIEW); 
    
  2. 깊이 테스트 비활성화

  3. 가 넣은 텍스처/텍스처 사각형 전체 화면 쿼드을 그립니다.

    glBegin(GL_QUADS); 
    glVertex2f(0,0); 
    glVertex2f(1,0); 
    glVertex2f(1,1); 
    glVertex2f(0,1); 
    glEnd(); 
    
  4. 정기적 인 투영/모델 뷰를 설정하고 계속하십시오.

희망이 있습니다.

+0

감사합니다 anantholine, 당신은 아주 좋다. 그러나 불행히도, 내 사진의 크기는 512X512입니다. 나는 이것이 2 차원의 힘이라고 생각합니다. 그리고 나를 좌절시키는 이유는이 작은 그림이 다른 작은 프로젝트에서 텍스처로로드 될 수 있기 때문입니다 (NeHe tut.5). 더 나쁜 것은 프로젝트가 원래 약간의 텍스처를로드했기 때문에 잘 작동한다는 것입니다. 그러나 같은 방식으로 사진을로드했는데 실패했습니다. 내 문제에 대해 다른 힌트를 주시겠습니까? – TonyLic

+0

다행 이군요. :) – Ani