PyQtGraph GLScatterPlotItem: непрозрачные цветные круги в 3D - PullRequest
0 голосов
/ 01 марта 2019

Мне бы хотелось иметь трехмерный график непрозрачных кругов без аддитивного смешивания, а также иметь возможность вращать сцену так, чтобы самые близкие круги отображались поверх самых дальних.

С помощью этой команды

gl.GLScatterPlotItem(pos=pos, color=color, size=size, pxMode=False)

Я получаю смешение цветов в области, где перекрываются круги:

image

Опция 'opaque'

gl.GLScatterPlotItem(pos=pos, color=color, size=size, pxMode=False, glOptions = 'opaque')

отключает смешение, однаковместо окружностей он строит квадраты:

image

Третий доступный вариант 'полупрозрачный'

gl.GLScatterPlotItem(pos=pos, color=color, size=size, pxMode=False, glOptions = 'translucent')

делает почти то, что мне нужно, но только если я смотрю изопределенные направления:

хорошо

плохо

Я немного копался в модуле OpenGl до«GLOptions»:

GLOptions = {
    'opaque': {
        GL_DEPTH_TEST: True,
        GL_BLEND: False,
        GL_ALPHA_TEST: False,
        GL_CULL_FACE: False,
    },
    'translucent': {
        GL_DEPTH_TEST: True,
        GL_BLEND: True,
        GL_ALPHA_TEST: False,
        GL_CULL_FACE: False,
        'glBlendFunc': (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),
    },
    'additive': {
        GL_DEPTH_TEST: False,
        GL_BLEND: True,
        GL_ALPHA_TEST: False,
        GL_CULL_FACE: False,
        'glBlendFunc': (GL_SRC_ALPHA, GL_ONE),
    },
}

Установка параметра «GL_DEPTH_TEST = False» для параметра «полупрозрачный» удаляет черные углы квадратов из «плохого» изображения, но также сохраняет последний нарисованный круг всегда сверху, чтоне то, что я хочу.

Я не мог понять комбинацию 'glBlendФункциональные параметры, которые будут производить желаемое изображение.Это вообще возможно?

...