Использование glDepthFunc и прозрачности в OpenGL - PullRequest
0 голосов
/ 27 апреля 2018

Это изображение отображается с использованием трех проходов.

  1. В первом проходе я отрисовываю три оси.
  2. во втором проходе отображается прозрачный цилиндр (glEnable (GL_BLEND)) alpha = 0.5f.
  3. наконец, золотые и серые сферы визуализируются в третьем проходе (glEnable (GL_BLEND)).

Альфа-значение золотых сфер = 1,0f и серой сферы = 0,2f.

enter image description here

Проблема: Как видите,

  1. цилиндр перекрывает сферы, хотя мы разрешаем смешивание.
  2. оси перекрывают цилиндр и сферы!

Вот мой код:

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClearDepthf(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glEnable(GL_CULL_FACE);
    glFrontFace(GL_CCW);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

здесь данные подготавливаются и отправляются шейдерам (первый проход)

    glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));

ps: геометрический шейдер используется для визуализации линий от заданных точек.

Затем мы готовим и передаем данные цилиндра

    glEnable(GL_BLEND);
    glCullFace(GL_FRONT);
    glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));
    glCullFace(GL_BACK);
    glDrawElements(GL_POINTS, 256, GL_UNSIGNED_INT, reinterpret_cast<void*>(0));
    glDisable( GL_BLEND);

ps: геометрический шейдер также используется для визуализации сетки цилиндров из заданных точек.

Наконец, я передаю золотую сферу и серую сферу за один проход

    glEnable(GL_BLEND);
    glDrawElements(GL_LINE_STRIP, goldenSphereNumber, GL_UNSIGNED_INT, (void*)0);
    glDrawElements(GL_LINE_STRIP, sphereIndexCount, GL_UNSIGNED_INT, (void*)0);
    glDisable( GL_BLEND);

ps: здесь также используется геометрический шейдер для визуализации сетки цилиндров по заданным линиям.

Вы видите что-то не так? Не могли бы вы помочь, пожалуйста?

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