代码之家  ›  专栏  ›  技术社区  ›  Sam Washburn

在半渲染正交场景的顶部将OpenGL切换到透视模式?

  •  4
  • Sam Washburn  · 技术社区  · 15 年前

    如果你能展示它是如何在opengles中完成的,那就太好了。

    3 回复  |  直到 14 年前
        1
  •  4
  •   kravemir    15 年前

    • 渲染全屏背景
    • 将视口设置为位置=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);
    
        2
  •  2
  •   Calvin1602    15 年前

    好吧,“就这么做”

    • 将投影矩阵设置为正交
    • 为二维对象设置模型视图
    • 渲染2D对象
    • 将投影矩阵设置为“投影”
    • 为三维对象设置模型视图
    • 渲染3D对象

    • 交换缓冲区。

        3
  •  0
  •   EdwinDebuger    8 年前

    我同意前面的文章,我认为更一般的情况是像3D对象和2dgui。

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