У меня есть этот визуализатор 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-й канал, чтобы установить альфа точек на краю объектов (отмеченных синим здесь):
Этот подход работает, но не для каждого угла (?), Как вы можете заметить в этой анимации:
Наклон модели сверху вниз приводит к тому, что прозрачные края появляются и исчезают, хотя в альфа-канале ничего не изменилось, я подозреваю, что существует проблема между глубиной и прозрачностью или что-то подобное, но я понятия не имею, как решить это. Вы можете мне помочь?