Mudar o OpenGL para o modo de perspectiva em cima de uma cena ortográfica meia -renderizada?

StackOverflow https://stackoverflow.com/questions/3436241

Pergunta

Temos um jogo principalmente em 2D que é executado em modo ortográfico, mas uma parte mostra um modelo 3D que é renderizado entre os outros objetos 2D. Como posso mudar para o modo de perspectiva, renderizar esse modelo e voltar para renderizar os outros objetos no modo ortográfico?

Parabéns se você pode mostrar como é feito no OpenGL es.

Foi útil?

Solução

Eu acho que isso não é exatamente uma pergunta especificada. Você quer mais visualizações? Ou você deseja ter um fundo 2D, objetos de jogo 3D, GUI 2D. Se você quiser isso, então:

  • renderizar fundo de tela cheia
  • Defina a ViewPort para Position = obj.pos-obj.size/2, size = obj.size, renderize objeto
  • Render 2d GUI

Ou você quer outra coisa?

EDITAR:

Aqui está o pequeno código:

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);

Outras dicas

Bem, "apenas faça isso"

  • Defina sua matriz de projeção como Ortho
  • Defina seu ModelView para objetos 2D
  • Renderize seus objetos 2D
  • Defina sua matriz de projeção como projeção
  • Defina seu ModelView para objetos 3D
  • Renderize seus objetos 3D

... e isso pode continuar novamente um

  • e trocar buffers.

Se você conhece a ordem de seus objetos como parece, também pode limpar o buffer z entre cada renderização.

Eu concordo com postagens anteriores e acho que um caso mais geral é como o objeto 3D e a GUI 2D. Apenas para a ênfase. :)

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top