0

スカイボックスに問題があります。すべてが正常に機能していますが、カメラが中央(またはその他の場所)にあるときは立方体のように感じます。前面には底面に存在する地面の一部が含まれており、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);
4

1 に答える 1

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()
于 2012-10-05T13:31:59.997 に答える