Простые текстуры куба не отображаются - PullRequest
0 голосов
/ 09 января 2020

Я занимаюсь разработкой программы с использованием lvjgl и lvj gui. При попытке отобразить 2D-текстуру проблем не возникает, но при попытке отобразить 3D-куб отображаются не все текстуры. Вот код рендеринга:

@Override
public void render(Context context) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   // glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glBegin(GL_QUADS);
    glColor3f(0f, 0f, 1f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, 0.5f);
    glVertex3f(0.5f, -0.5f, 0.5f);

    glColor3f(1, 0, 1);
    glVertex3f(0.5f, -0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f,0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, -0.5f);

    glColor3f(0, 1, 1);
    glVertex3f(0.5f, -0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, 0.5f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(0.5f, 0.5f, -0.5f);


    glColor3f(1, 0, 0);
    glVertex3f(0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, 0.5f, -0.5f);

    glColor3f(1, 1, 0);
    glVertex3f(-0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, 0.5f, 0.5f);

    glColor3f(0, 1, 0);
    glVertex3f(-0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, 0.5f, -0.5f);

    glEnd();
    if(rotate)
        glRotatef(0.01f,0.0f,0.5f,0.0f);

}

Перед рендерингом выполняется следующее:

public RenderingCallback() {
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(0.5f);
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glRotatef(20f,0.5f,0.0f,0.0f);
}

Сам куб выглядит так: Cube

И видео

Как видите, синий цвет вообще не отображается, а некоторые текстуры перекрывают друг друга. Если вы удалите одну из сторон, появится синяя. Как я могу решить эту проблему? Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 09 января 2020

Tnx всем за помощь и @ybungalobill за решение. Я добавляю

glEnable(GL_DEPTH_TEST);

в render(Context context) пусто и проблема решена

1 голос
/ 09 января 2020

Вам не хватает буфера глубины. В инициализации LWJGL укажите размер буфера глубины перед вызовом glfwCreateWindow:

glfwWindowHint(GLFW_DEPTH_BITS, 16);

Также следует очистить глубину до 1,0 вместо 0,5:

glClearDepth(1.0f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...