GL_BLEND не работает правильно с Vertex Array

У меня есть этот визуализатор 3D-модели, который производит 3D-модели, начиная с Disparity Maps, вот пример:

Входные данные:

введите описание изображения здесь введите описание изображения здесь

Выход:

введите описание изображения здесь

3D визуализатор написан на OpenGL и GLUT, в частности, весь код можно найти здесь:

https://github.com/lpuglia/DisparityVisualizer

Модель построена с использованием GL_TRIANGLE_STRIP в GL_VERTEX_ARRAY, Эта статья объясняет способ воспроизвести мою модель:

http://www.learnopengles.com/tag/vbos/

В частности, я использую следующий код в качестве функции отображения:

glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_COLOR_ARRAY );
glVertexPointer( 3, GL_FLOAT, 0, vertices );
glColorPointer( 4, GL_FLOAT, 0, colors );
glDrawElements( GL_TRIANGLE_STRIP, getIndicesCount(width,height), GL_UNSIGNED_INT, indices );
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_COLOR_ARRAY );

У меня проблемы с управлением прозрачностью, в данный момент я использую этот код для инициализации:

glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);

Как вы уже могли заметить glColorPointer функция используется с 4 каналами, фактически, я использую 4-й канал, чтобы установить альфа точек на краю объектов (отмеченных синим здесь):

введите описание изображения здесь

Этот подход работает, но не для каждого угла (?), Как вы можете заметить в этой анимации:

введите описание изображения здесь

Наклон модели сверху вниз приводит к тому, что прозрачные края появляются и исчезают, даже если в альфа-канале ничего не изменилось, я подозреваю, что существует проблема между глубиной и прозрачностью или что-то подобное, но я понятия не имею, как это решить. Вы можете мне помочь?

1

Решение

Так что, по-видимому, для моих целей мне не нужно смешивать, мне просто нужно включать и выключать альфу, что я могу просто заменить:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

С:

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_EQUAL, 1.0);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector