OpenGl ES:让天空盒看起来更逼真

时间:2012-10-05 13:29:06

标签: opengl-es

我遇到了天空盒的问题。 一切都工作正常,但我们真的感觉就像我们在相机位于中间(或其他地方)的立方体中,正面包含一部分地面存在于底面,我们真的感觉到它们之间的90°角他们。 有什么想改善这个吗?

NB。我已经编辑了图像,所以颜色是相同的,并且停用任何光效果

编辑于10/10

我现在所做的就是这个(混合OpenGL和伪代码)

glMatrixMode(GL_PROJECTION)
glEnable(GL_DEPH_TEST)
glMatrixMode(GL_MODELVIEW);
Define_skybox (set vertices/texture coords; bind them on triangles)
glEnable(GL_DEPH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_TEXTURE_2D)
glEnable(GL_BLEND)
glMatrixMode(GL_PROJECTION)
glLoadIdentity();
glFrustumf(xmin, xmax, ymin, ymax, m_near, m_far) 
     with : m_fov = 90.0f; m_near = 0.1f; ymax = m_near * tan(m_fov * PI / 360); ymin = -ymax; xmax = ymax; xmin = -xmax;
glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
Create 3 vect (center, eye, up) with spherical coordinate for my camera rotation
    eye(0;0;0), up (0; 1; 0), 
    center is calculated from rotation angle & spherical coordiantes
modelviewmatrix = glulookat(eye, center, up);
glLoadMatrix(modelviewmatrix);

1 个答案:

答案 0 :(得分:2)

与立方体有关的优势在哪里?摄像机必须位于立方体的正中心,并且使用具有90°FOV的平面中心透视投影渲染立方体面。如果你以这种方式创建你的天空盒,它不应该“感觉”像一个立方体。

由于评论而更新

绘制天空盒时的主要操作(伪代码)

render_scene_with_skybox():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glDepthMask(GL_FALSE) # disable depth writes
    glDisable(GL_DEPTH_TEST)

    set_projection()
    set_modelview(orientation=camera.orientation, location=(0,0,0))

    draw_skybox() # the skybox spans from -1 to 1 in either direction

    # those should be really on-demand
    glEnable(GL_DEPTH_TEST)
    glDepthMask(GL_TRUE)

    set_modelview(orientation=camera.orientation, location=camera.location)
    draw_scene()