[Interest] Qt3D face culling

Юрий Дынников morodeer at gmail.com
Fri Mar 11 12:34:56 CET 2016


Thank you, Sean.

I've managed to disable face-culling by putting QStateSet under
QClearBuffer, but to get there, I had to write a piece of horrible code:
https://gist.github.com/morodeer/974cb4ddd47c1f1f8b34#file-main-cpp

    Qt3DCore::QNode* clearBuffer_node = 0;
    foreach (Qt3DCore::QNode* node_viewport, forwardRenderer->childrenNodes()) {
        if (dynamic_cast<Qt3DRender::QViewport*>(node_viewport)) {
            foreach (Qt3DCore::QNode* node_cameraselector,
node_viewport->childrenNodes()) {
                if
(dynamic_cast<Qt3DRender::QCameraSelector*>(node_cameraselector)) {
                    foreach (Qt3DCore::QNode* node_clearbuffer,
node_cameraselector->childrenNodes()) {
                        if
(dynamic_cast<Qt3DRender::QClearBuffer*>(node_clearbuffer)) {
                            clearBuffer_node = node_clearbuffer;
                            break;
                        }
                    }
                    break;
                }
            }
            break;
        }
    }

    if (clearBuffer_node) {
        Qt3DRender::QStateSet* set = new
Qt3DRender::QStateSet(clearBuffer_node);
        Qt3DRender::QDepthTest* depthTest = new Qt3DRender::QDepthTest;
        depthTest->setFunc(Qt3DRender::QDepthTest::Always);
        set->addRenderState(depthTest);
    }


Am I missing any simpler way to do that? Viewport, CameraSelector and
ClearBuffer are all private in ForwardRenderer.


чт, 10 мар. 2016 г. в 21:13, Sean Harmer <sean.harmer at kdab.com>:

> On Thursday 10 Mar 2016 15:13:07 Юрий Дынников wrote:
> > Hello, I'm trying to use Qt3D (C++) module, and there is one huge
> problem:
> > How can I enable displaying any surface (or triangle, to be simple) from
> > both sides?
> >
> > I've read that that's all about face-culling, but I can't find where it
> is
> > applied during preparation of scene.
> > I've found QCullFace class and managed to find the place where it should
> > belong by finding QML examples with culling settings:
> > QMaterial->QTechnique->QRenderPass->QCullFace(or any other QRenderState).
> > But if I replace QCuboidMesh with QPlaneMesh in "Basic shapes" examples,
> > and try to debug all those levels of structure, I find that neither for
> > QPhongMaterial (tested it on Qt5.5.1) nor for QGoochMaterial (It works on
> > Qt5.6.0rc1) there are no QCullFace objects in their compositions.
> >
> > I've also tried to make a class for mesh of two triangles based on three
> > vertices, but rearranging indexes to make it "flip" didn't work. Neither
> > did modifying normals or tangents.
>
> Instead of adding the CullFace to the materials, you can also add it to the
> framegraph. Take a copy of the ForwardRenderer.qml framegraph (if you're
> usign
> that) and add a StateSet (RenderStateSet in 5.7) to the tree containing the
> CullFaceState and you will also need to add in a DepthTest state object too
> since we are replacing Qt3D's default state.
>
> See https://bugreports.qt.io/browse/QTBUG-51770 and my comment there.
>
> Cheers,
>
> Sean
>
>
> >
> > Thanks in advance,
> > morodeer
>
> --
> Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
> KDAB (UK) Ltd, a KDAB Group company
> Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
> Mobile: +44 (0)7545 140604
> KDAB - Qt Experts
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160311/f036c9e1/attachment.html>


More information about the Interest mailing list