2013-12-21 6 views
0

안녕하세요, 저는 OpenGl 만 사용하여 간단한 게임을 만들고 있습니다 ..... 저는 메인 메뉴를 만들고, 배경 및 일부 옵션을 설정했습니다. 언제 어떻게 그려야합니까? 메뉴 그리기는 배경 이미지가 녹색으로 변합니다. 색상, 그런데 메뉴의 마지막 문자열은 녹색이고, 파란색으로 칠하면 배경 이미지가 같은 색상으로 바뀝니다. plz 도움말은 MainMenuDispaly 함수를 사용합니다.openGl의 배경 문제

이 모든 일이 :(

void MainMenuDis() 
{ 
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glBindTexture(GL_TEXTURE_2D,texture); 
    glEnable (GL_TEXTURE_2D); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0,1); 
    glVertex3f(-5,5,-6); 
    glTexCoord2f(0,0); 
    glVertex3f(-5,-5,-6); 
    glTexCoord2f(1,0); 
    glVertex3f(5,-5,-6); 
    glTexCoord2f(1,1); 
    glVertex3f(5,5,-6); 
    glEnd(); 

    glDisable(GL_TEXTURE_2D); 

    for(int i = 0 ; i < 5 ; ++i) 
    { 
    MainMenuList[i].DrawString(GLUT_BITMAP_9_BY_15); 
    } 

    Navigate.DrawString(GLUT_BITMAP_HELVETICA_12); 

    glutSwapBuffers(); 
    glFlush(); 
} 
+0

: 사물의 수를 설정 고정 기능 파이프 라인의 직접 모드를 사용하면 한 사용하지만 귀하의 경우에는

'glUseProgram(…);' 

. 즉시 모드는 더 이상 사용되지 않습니다. –

+0

@Sarge Borsch는 올바른 방법 또는 유용한 튜토리얼을 알려주고 있습니다. –

+0

예를 들어 다음을 볼 수 있습니다. [최신 3D 그래픽 프로그래밍 학습] (http://www.arcsynthesis.org/gltut/) 또는 [opengl-tutorial.org] (http://www.opengl-tutorial.org/). 셰이더 작업은 첫 번째 결과에서 더 복잡해 보입니다. 첫 번째 결과를 볼 때까지 시간이 오래 걸리므로 더 이상 사용하지 않아도되지만 더 이상 사용되지 않는 직접 모드 대신 배우는 시간이 필요합니다. –

답변

1

귀하의 문제를 제외하고 잘 이루어졌다 : 여기

은 내가 무슨 그림

여기

입니다 당신이 OpenGL을 잊어 버렸습니다. 상태 기계. 나는. 그것은 그것이하는 일의 상태를 유지하고 나머지 부분에 적용합니다. 텍스쳐 쿼드를 그리는 중이지만 정의한 다른 모든 상태도 포함합니다. 색상을 포함하면 메뉴 항목을 그릴 수 있습니다 (장기간 glutBitmapString을 사용하여 그려서는 안됨).

OpenGL을 질감이있는 쿼드를 그리기에 적합한 상태로 가져 왔습니다. 현대의 OpenGL에서는 모든 도면 세부 정보가 단일 선으로 전환되는 사용 된 셰이더에 의해 제어되기 때문에 이제는 셰이더와 정점 배열을 VBO로 사용해야합니다. 당신은 잘못하고있다

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glDisable(GL_DEPTH_TEST); 
    glDisable(GL_LIGHTING); 
    glColor3f(1.,1.,1.); 
    /* and probably a few more depending on what you're setting elsewhere */ 

    glBindTexture(GL_TEXTURE_2D,texture); 
    glEnable (GL_TEXTURE_2D); 
    glBegin(GL_QUADS); 
     … 
+0

그냥 glColoef (1,1,1)를 추가하십시오; glBegin (GL_QUADS) 이후. thanks :) –

+0

@SaifSuleiman : glBegin/glEnd 블록 외부에서 glColor를 완벽하게 호출 할 수 있습니다. OpenGL의 상태 머신을 예시하기 위해 코드 스 니펫에서 의도적으로 그 작업을 수행했습니다. – datenwolf