Это изображение отображается с использованием трех проходов.
- В первом проходе я отрисовываю три оси.
- во втором проходе отображается прозрачный цилиндр (glEnable (GL_BLEND)) alpha = 0.5f.
- наконец, золотые и серые сферы визуализируются в третьем проходе (glEnable (GL_BLEND)).
Альфа-значение золотых сфер = 1,0f и серой сферы = 0,2f.
Проблема:
Как видите,
- цилиндр перекрывает сферы, хотя мы разрешаем смешивание.
- оси перекрывают цилиндр и сферы!
Вот мой код:
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: здесь также используется геометрический шейдер для визуализации сетки цилиндров по заданным линиям.
Вы видите что-то не так? Не могли бы вы помочь, пожалуйста?