Я далек от опыта работы с 3D-визуализацией и не уверен, что это проблема Mayavi как таковая (извиняюсь, если я лаю не на то дерево), но я наблюдаю следующее неожиданное поведение:
conda, anaconda 3, установила mayavi с использованием pip install mayavi vtk pyqt5
а не conda (после столкновения с проблемой, аналогичной # 652)
Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux
Name: mayavi
Version: 4.6.0
Name: vtk
Version: 8.1.0
Location: /home/xxxyyy/anaconda3/envs/ELA/lib/python3.6/site-packages
# example from https://stackoverflow.com/a/10740780
from mayavi import mlab
import numpy as np
# Generate some random hypocenters
x, y, z, mag = np.random.random((4, 500))
# Make a curved well bore...
wellx, welly, wellz = 3 * [np.linspace(0, 1.5, 10)]
wellz = wellz**2
# Plot the hypocenters, colored and scaled by magnitude
mlab.points3d(x, y, z, mag)
# Plot the wellbore
mlab.plot3d(wellx, welly, wellz, tube_radius=0.1)
mlab.show()
Цветные шары должны окружать серую трубу, скрывая ее части внизу.
Я получаю ожидаемое поведение с предыдущей версией mayavi в другой ОС - Windows (версия mayavi TBC, вероятно, 4.5)
Кажется, у меня такая же проблема с точками plot3d, размещенными вокруг «земного шара»:
sphere = mlab.points3d(0, 0, 0, scale_mode='none',
scale_factor=2,
# color=(0.67, 0.77, 0.93),
color=ocean_blue,
resolution=50,
opacity=.85,
name='Earth')
#
# These parameters, as well as the color, where tweaked through the GUI,
# with the record mode to produce lines of code usable in a script.
sphere.actor.property.specular = 0.45
sphere.actor.property.specular_power = 5
# Backface culling is necessary for more a beautiful transparent
# rendering.
sphere.actor.property.backface_culling = True
+1 для бэкэнда pyqt / pyside, тестирование на Debian stretch с [email protected] и [email protected]
Похоже, что это общая проблема VTK, и она уже наблюдалась ранее в # 574 и # 491. У меня не было времени изучить это или найти решение.
@ jmp75 у меня была такая же
@lhvalentini Я использую Anaconda 2 (python 2.7.15) в Windows 10 с пакетами mayavi 4.5.0 и vtk 6.3.0.
Ребята, если это проблема с непрозрачностью, это другая проблема.
Я попробовал код OPs, и он у меня работает правильно. Если это проблема, связанная с ОС, это, вероятно, проблема с вашими драйверами, поскольку она определенно подходит мне на моем компьютере Mac OS с VTK 8.1.1 и Mayavi от мастера. Я сомневаюсь, что в Mayavi что-то изменилось, чтобы это исправить.
@prabhuramachandran Я
Я могу воспроизвести проблему (используя приведенный выше пример цветных шариков) на RHEL 7, PyQt5 и Mayavi 4.6.2. Мне удалось заставить его работать правильно, удалив PyQt5 и установив wxPython. К сожалению, мне нужен PyQt5. На одной из двух машин, с которыми я работаю, я могу запустить ее под VirtualGL (все еще используя RHEL 7, PyQt5 и Mayavi 4.6.2), и проблема исчезнет. Однако на другом компьютере (производственном) VirtualGL вызывает сбой Mayavi.
Есть предложения, как исправить это при использовании PyQt5?
Указывает ли тот факт, что я воспроизвел проблему в PyQt5, но не в wxPython?
У меня аналогичная проблема на Linux Mint 18, 64-бит (Anaconda, Python 3.6, Qt 5.6.2, pyqt 5.6.0, VTK 8.1.1, Mayavi 4.6.2, установленный из conda-forge).
Если я просто запустил ванильный mlab.test_points3d()
порядок объектов неверен:
Я попытался поэкспериментировать с вышеупомянутыми настройками scene.renderer.use_depth_peeling
и f.scene.renderer.maximum_number_of_peels
, но безуспешно.
Есть идеи, в чем может быть причина?
Обновление. Эта проблема выглядит как проблема Qt5 в Linux. Я могу видеть это на своих машинах с ubuntu, но не на OS X. Не уверен в окнах. Я не вижу этого с бэкэндом Qt4. Похоже, что при использовании Qt5 и QVTKRenderWindowInteractor каким-то образом происходит сбой рендеринга. Я также сообщил об этой проблеме ребятам из VTK. Не уверен, в чем проблема.
Здесь та же проблема. Я вернулся на Qt4, и все работает нормально.
У меня эта проблема в Linux с Qt4 (активируется с помощью ipython% gui qt4). Хотя, может быть, это потому, что у меня Intel Graphics (что-то связанное уже упоминалось в известных проблемах).
Мне тоже пришлось установить Qt4; как-то до этого просто добавление «qt4» в параметры не приводило к сообщению об ошибке, а вместо этого использовалось Qt5.
хорошо, я не понял, что qt4 не был установлен на моем конце (действительно, @ronceray , это не дает ошибки) ...
PyQt 4.12.3 не запускался, но мне удалось заставить его работать с версией 4.12.1 ..
Намного медленнее, чем PyQt5, но у него нет этой проблемы переднего плана ... избавляет меня от установки другой видеокарты!
Я обновился с Fedora 27 -> Fedora 29 и установил последние графические драйверы NVIDIA . После этого mayavi работает должным образом с использованием pyqt5.
Я боролся с той же проблемой (неправильный рендеринг глубины), используя Python3 в течение последних нескольких недель, и подумал, что поделился бы своим опытом и здесь (по состоянию на 2019-04-15).
Мы находимся на одной странице, вот версии, на которые я смотрю:
Mayavi / VTK / traits может использовать набор инструментов wx или qt4. С помощью инструментария 'qt4' есть дополнительная возможность указать QT API; варианты: pyqt, pyqt5, pyside и pyside2. Они указываются с помощью переменных среды ETS_TOOLKIT (установите для них wx или qt4) и QT_API (установите для них pyqt, pyqt5, pyside или pyside2; применимо, только если для ETS_TOOLKIT установлено qt4).
В Mint 18.3 (и, вероятно, для любого варианта Ubuntu 16.04) официальный Python3 - 3.5.2. Некоторые модули доступны с apt / dpkg, но для установки некоторых требуется использование pip. Мне не удалось установить wxPython для Python3. Используя Qt, результаты меняются:
С Mint 19.1 (и, вероятно, со всеми вариантами Ubuntu 18.04) результаты аналогичны. Версия Python3 - 3.6.7; все модули такие же, как и раньше, за исключением того, что здесь мне удалось установить wxPython (4.0.1) с помощью pip3. В этом случае установка ETS_TOOLKIT = wx дает правильный порядок глубины. Что касается инструментария qt4, результаты были такими же, как и результаты Mint 18.3 (т.е. pyqt и pyside отображены правильно; pyqt5 и pyside2 - нет).
Я попытался скомпилировать PySide2 из исходного кода и смог его скомпилировать; однако рендеринг все еще неправильный.
Я также пробовал использовать pyenv для тестирования различных версий Python3 (в частности, 3.5.2 и 3.7.3). В обоих случаях я мог установить необходимые модули через pip3, за исключением того, что официальный код PySide не поддерживает версии Python выше 3.4. PySide2 доступен, как и PyQt5; ни один из них не работает правильно. Мне не удалось скомпилировать wxPython.
На данный момент мне интересно, не проблема ли это VTK, а проблема QT (сейчас я отказался от wxPython). Но как ни странно, на моем рабочем ноутбуке (с мятой 18,3), с pyenv я имел Python 3.7.3 работает, и в этом случае порядок глубина была оказана правильно - либо PyQt5 или PySide2 ( в то время как на моем домашнем ноутбуке как из QT_API дал неправильный порядок глубины). Так в чем разница? Насколько я могу судить, единственным отличием был драйвер OpenGL / GLX: на моих домашних ноутбуках используется драйвер SGI (как сообщает glxinfo), а на моем рабочем ноутбуке используется драйвер NVIDIA.
Наконец, я также попытался запустить пару тестов с VirtualBox (Mint 19.1 с xfce). Я все еще пробую разные комбинации, но пока результаты те же. (Glxinfo сообщает о драйвере OpenGL / GLX как о SGI).
Эта ветка на VTK ML, кажется, упоминает ту же проблему. К сожалению, он остался без ответа ...
Думая, я попробовал на своем ноутбуке Debian кое-что, о чем стоит сообщить. Это ноутбук NVIDIA Optimus, описанный в вики-странице Debian . В основном в этих системах две видеокарты: NVIDIA и Intel.
Краткая история: при прочих равных, исходный тестовый скрипт, который я опубликовал, некорректно отображается на карте Intel, но правильно на оборудовании NVIDIA.
среда (соответствующие пакеты):
envisage 4.7.2 pypi_0 pypi
mayavi 4.6.2 pypi_0 pypi
pyface 6.0.0 pypi_0 pypi
pygments 2.3.1 pypi_0 pypi
pyqt5 5.12.2 pypi_0 pypi
pyqt5-sip 4.19.17 pypi_0 pypi
python 3.6.8 h0371630_0
traits 5.1.1 pypi_0 pypi
traitsui 6.0.0 pypi_0 pypi
vtk 8.1.2 pypi_0 pypi
См. Вики Debian, чтобы узнать, как использовать optirun
. optirun python ~/src/tmp/qtbug.py
сработало правильно. Чтобы проиллюстрировать разницу с / без optirun
, используя пример приложения:
glxgears -info
возвращает
GL_RENDERER = Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2)
GL_VERSION = 3.0 Mesa 18.3.4
GL_VENDOR = Intel Open Source Technology Center
тогда как optirun glxgears -info
GL_RENDERER = Quadro M1200/PCIe/SSE2
GL_VERSION = 4.6.0 NVIDIA 418.56
GL_VENDOR = NVIDIA Corporation
Просто чтобы добавить еще одно подтверждение, здесь, в Arch Linux, на Dell Precision 5520, я вижу проблему, работающую на чипе Intel, но не на карте nvidia через optirun
. Это с Python 3.7, Qt5 и mayavi, все они установлены через официальные репозитории Arch.
Та же проблема, запуск mayavi с бэкэндом PyQt5 приводит к неправильному порядку рендеринга с использованием драйверов Mesa / SGI в Debian Stretch, но он работает с установленной переменной среды ETS_TOOLKIT=wx
.
Я решил это, используя wxPython вместо PyQt.
Эта ветка была просто неоценимой в решении проблемы, большое спасибо за комментарии.
Та же проблема, не удалось заставить его работать с wx, поэтому установил python-pyqt4, установил ETS_TOOLKIT=qt4
и QT_API=pyqt
и это решило ее.
Я хотел бы добавить еще одно подтверждение для одной из конфигураций, упомянутых выше. Я работаю на машине Linux с Ubuntu 18.04 в качестве ОС. В моей системе есть видеокарта Intel. Я использую anaconda3 для анимации движения заряженной частицы. Конечным результатом должна быть спираль с линией, проходящей через ее центр. Для моей среды Python 3.6.8 с Mayavi 4.6.2, vtk 8.1.2 и pyqt 5.9.2 я получаю что-то вроде этого:
Обратите внимание, что красная линия кажется вне спирали, что неверно.
Чтобы решить эту проблему, я создал новую среду Python 3.5 в anaconda3 и установил пакеты в следующем порядке:
pyqt 4.11.4 от conda-forge
vtk 8.1.2 из pypi
Mayavi 4.6.2 от conda-forge
и установите соответствующие переменные в моей оболочке, используя
экспорт ETS_TOOLKIT = qt4
экспорт QT_API = pyqt
и запустил мой код, чтобы получить правильную диаграмму, как показано ниже
.
Спасибо всем вышеперечисленным умным людям, которые в этом разобрались. Ваше здоровье!
Воспроизведя проблему (используя приведенный выше пример с цветными шарами) ранее сегодня, я смог решить проблему в среде conda, которая содержала:
1) Python 3.8.5
2) VTK 9.0.1 (устанавливается с помощью whl файла)
3) pyqt5
4) Последняя версия Mayavi «Bleeding Edge» (4.7.3.dev0).
Так, может быть, VTK 9 решит эту проблему?
Я могу подтвердить, что VTK 9.0.1 с pyqt5 и Mayavi 4.7.2 (от conda-forge) устраняет эту проблему.
Да, действительно, я могу подтвердить, что эта проблема теперь решена с помощью VTK-9.0.1 и последней версии Mayavi, хотя похоже, что именно VTK является источником исправления. Я тестировал на машине Linux, где раньше это не помогало. Отлично. Спасибо, что сообщили об этом.
Самый полезный комментарий
Я боролся с той же проблемой (неправильный рендеринг глубины), используя Python3 в течение последних нескольких недель, и подумал, что поделился бы своим опытом и здесь (по состоянию на 2019-04-15).
Мы находимся на одной странице, вот версии, на которые я смотрю:
Mayavi / VTK / traits может использовать набор инструментов wx или qt4. С помощью инструментария 'qt4' есть дополнительная возможность указать QT API; варианты: pyqt, pyqt5, pyside и pyside2. Они указываются с помощью переменных среды ETS_TOOLKIT (установите для них wx или qt4) и QT_API (установите для них pyqt, pyqt5, pyside или pyside2; применимо, только если для ETS_TOOLKIT установлено qt4).
В Mint 18.3 (и, вероятно, для любого варианта Ubuntu 16.04) официальный Python3 - 3.5.2. Некоторые модули доступны с apt / dpkg, но для установки некоторых требуется использование pip. Мне не удалось установить wxPython для Python3. Используя Qt, результаты меняются:
С Mint 19.1 (и, вероятно, со всеми вариантами Ubuntu 18.04) результаты аналогичны. Версия Python3 - 3.6.7; все модули такие же, как и раньше, за исключением того, что здесь мне удалось установить wxPython (4.0.1) с помощью pip3. В этом случае установка ETS_TOOLKIT = wx дает правильный порядок глубины. Что касается инструментария qt4, результаты были такими же, как и результаты Mint 18.3 (т.е. pyqt и pyside отображены правильно; pyqt5 и pyside2 - нет).
Я попытался скомпилировать PySide2 из исходного кода и смог его скомпилировать; однако рендеринг все еще неправильный.
Я также пробовал использовать pyenv для тестирования различных версий Python3 (в частности, 3.5.2 и 3.7.3). В обоих случаях я мог установить необходимые модули через pip3, за исключением того, что официальный код PySide не поддерживает версии Python выше 3.4. PySide2 доступен, как и PyQt5; ни один из них не работает правильно. Мне не удалось скомпилировать wxPython.
На данный момент мне интересно, не проблема ли это VTK, а проблема QT (сейчас я отказался от wxPython). Но как ни странно, на моем рабочем ноутбуке (с мятой 18,3), с pyenv я имел Python 3.7.3 работает, и в этом случае порядок глубина была оказана правильно - либо PyQt5 или PySide2 ( в то время как на моем домашнем ноутбуке как из QT_API дал неправильный порядок глубины). Так в чем разница? Насколько я могу судить, единственным отличием был драйвер OpenGL / GLX: на моих домашних ноутбуках используется драйвер SGI (как сообщает glxinfo), а на моем рабочем ноутбуке используется драйвер NVIDIA.
Наконец, я также попытался запустить пару тестов с VirtualBox (Mint 19.1 с xfce). Я все еще пробую разные комбинации, но пока результаты те же. (Glxinfo сообщает о драйвере OpenGL / GLX как о SGI).