Установите CullFace в Front и Back в Qt3D в Python через PySide2
Я хотел установить QCullFace
в FrontAndBack
и вот почему я написал это:
from PySide2.Qt3DRender import Qt3DRender
cull_face = Qt3DRender.QCullFace()
cull_face.setMode(Qt3DRender.QCullFace.FrontAndBack)
render_pass = Qt3DRender.QRenderPass()
render_pass.addRenderState(cull_face)
Код выше должен установить CullFace глобально. Но это не так. Что я сделал не так?
1 ответ
Я предполагаю, что привязка Python не меняет работу Qt в C++.
Так что вы, вероятно, есть Qt3DWindow
где-то (если вы не рендеритесь на экран или на свою собственную поверхность). Если вы хотите, чтобы ваше выбранное лицо было активным, вы должны получить QRenderSettings
из окна по телефону renderSettings()
, Настройки рендеринга содержат активный фреймграф, т. Е. Если вы хотите, чтобы какие-либо состояния рендеринга или что-либо еще, что связано с фреймграфом, были активными, он должен быть дочерним по отношению к узлу, который параметры рендеринга содержат как активный фреймграф. Вы можете получить и установить активный фреймграф в настройках рендеринга, вызвав activeFramegraph()
или же setActiveFramegraph(QFramegraphNode*)
,
Есть ли причина, по которой вы используете QRenderPass
? Потому что, если да, вы должны создать QRenderPassFilter
, чтобы установить его в качестве активного фрейма графа в настройках рендера (QRenderPass
не наследует QFramegraphNode
). Таким образом, вы можете отфильтровать определенные объекты из прохода рендеринга.
Но так как вы хотите, чтобы отбракованное лицо было активным в глобальном масштабе, я предлагаю вам использовать QRenderStateSet
и добавить QCullFace
там. Затем вы можете установить состояние рендеринга в качестве активного фрейма графа в настройках рендеринга 3D-окна.