2010-08-08 2 views
4

우리는 대부분 정사영 모드로 실행되는 2D 게임을 가지고 있지만, 한 부분은 다른 2D 오브젝트 사이에 렌더링되는 3D 모델을 보여줍니다. 어떻게 원근감 모드로 전환하고, 그 모델을 렌더링 한 다음, 다른 오브젝트를 직교 모드로 렌더링하기 위해 다시 전환 할 수 있습니까?절반으로 렌더링 된 직교 장면 위에 OpenGL을 원근감 모드로 전환 하시겠습니까?

OpenGL ES에서 어떻게 수행되었는지 보여줄 수 있다면 칭찬 해주세요.

답변

4

이 질문은 정확하게 지정되어 있지 않다고 생각합니다. 더 많은 의견을 원하십니까? 또는 2D 배경, 3D 게임 객체, 2D GUI를 갖고 싶습니다. 그런 다음이 원하는 경우

  • 하는 위치를
  • 세트 뷰포트 전체 화면 배경 렌더링을 = obj.pos-obj.size/2, 크기 = obj.size, 렌더링 객체
  • 렌더링 2D GUI를

또는 다른 것을 원하십니까?

편집 :

여기

작은 코드입니다 :

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0,w,0,h,near,far); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(pos.x,...); 

DrawQuads(); 

//if you want to keep your previus matrix 
glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
glLoadIdentity(); 
gluPerspective(90,width/(float)height,0.001,1000); 
glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glLoadIdentity(); 
glTranslatef(pos.x,...); 
glRotate(-45.0f,1,0,0); 
glTranslate(0,0,distance from object); 
glRotate(90.0f,1,0,0); 
// or use gluLookAt 
// 0,0,1 - if you want have z as up in view 
// 0,1,0 - for y 
//gluLookAt(pos.x,pos.y,pos.z,cam.x,cam.y,cam.z,0,0,1); 

glScale(object.width/model.width,...); 
DrawModel(); 

// Restore old ortho 
glPopMatrix(); 
glMatrixMode(GL_PROJECTION); 
glPopMatrix(); 
glMatrixMode(GL_MODELVIEW); 
+0

내가이 후 나는 관점 모드에서 3D 모델을 렌더링 할 필요가) 배경 (스프라이트에서 직교 모드에서 여러 쿼드 렌더링하고있어, 그 후 나는 전경에서 좀 더 스프라이트를 렌더링 할 필요가있다. 전체 화면 배경이 아닙니다. 말이 돼? –

+0

편집했습니다. 도움이 될까요? – kravemir

+0

시간을내어 코드 예제를 작성해 주셔서 감사합니다. 나는 투영 행렬을 밀어 낼 수 있다는 것을 몰랐다. 또한 rotate/translate 코드가 도움이되었습니다. –

2

음, "단지 그것을 할"

  • 는 오르로 투영 행렬을 설정 2D는
  • 객체에 대한
  • 은 모델 뷰를 설정
  • 2D 객체 렌더링
  • ,210
  • 투사로 투영 행렬을 설정
  • 3D는
  • 당신의 3D는

개체를 렌더링 객체에 대한
  • 은 모델 뷰를 설정 ... 그리고 이것은 다시 다시

    • 및 스왑 버퍼에 갈 수 있습니다 .

    개체의 순서를 알고있는 것처럼 보이면 각 렌더링 사이에 z 버퍼를 지울 수도 있습니다.

  • 0

    나는 이전 글에 동의하며, 더 일반적인 경우는 3D 오브젝트 및 2D GUI와 같다고 생각합니다. 다시 강조하기 위해. :)

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, (GLfloat)s_width/(GLfloat)s_height, near, far); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    // render 3D object 
    glUseProgram(modelProgram); 
    glSetUniformMat(glGetUniformLocation(model.mvp, "mvp"), mvpMat); 
    glBindVertexArray(model.vao); 
    glDrawArrays(GL_TRIANGLES, 0, model.size); 
    glUseProgram(0); 
    
    
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, width, 0, height, -1.0, 1.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    // draw GUI 
    renderGUI();