【问题标题】:Set CullFace to Front and Back in Qt3D in Python via PySide2通过 PySide2 在 Python 中的 Qt3D 中将 CullFace 设置为 Front 和 Back
【发布时间】:2018-10-01 05:30:46
【问题描述】:
我想将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。但事实并非如此。我做错了什么?
【问题讨论】:
标签:
python-3.x
qt5
pyqt5
qt3d
pyside2
【解决方案1】:
我假设 python 绑定不会改变 Qt 在 C++ 中的工作方式。
所以你可能在某个地方有一个Qt3DWindow(除非你渲染到屏幕外或你自己的表面)。如果您希望您的剔除面处于活动状态,您必须通过调用renderSettings() 从窗口中检索QRenderSettings。渲染设置保存活动帧图,即如果您希望任何渲染状态或与帧图相关的任何其他内容处于活动状态,它必须是渲染设置作为活动帧图保存的节点的子节点。您可以通过调用activeFramegraph() 或setActiveFramegraph(QFramegraphNode*) 来获取和设置渲染设置上的活动帧图。
您使用QRenderPass 有什么原因吗?因为如果是,您必须创建一个QRenderPassFilter,以便将其设置为渲染设置上的活动帧图(QRenderPass 不继承QFramegraphNode)。这样您就可以从渲染过程中过滤掉某些对象。
但由于您希望剔除面在全局范围内处于活动状态,我建议您使用QRenderStateSet 并在此处添加QCullFace。然后,您可以在 3D 窗口的渲染设置上将渲染状态集设置为活动帧图。