Установите 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-окна.

Другие вопросы по тегам