繁体   English   中英

Qt 3D:如何在每个面上绘制具有不同纹理的立方体?

[英]Qt 3D: How to draw a cube with different textures on each face?

我是 Qt 3D (C++) 的新手,在使用我的第一个 3D 应用程序进行培训时,我无法实现以下目标:

在每个面上创建一个具有 6 种不同纹理的立方体......直到现在,这是我尝试过的:

// Cuboid shape data
    Qt3DExtras::QCuboidMesh *cuboid = new Qt3DExtras::QCuboidMesh();

    // CuboidMesh Transform
    Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform();
    cuboidTransform->setScale(2.0f);

   Qt3DExtras::QTextureMaterial *textureMaterial = new Qt3DExtras::QTextureMaterial();
   Qt3DRender::QTextureCubeMap *cubMap = new Qt3DRender::QTextureCubeMap();

    Qt3DRender::QTextureImage *f1 = new Qt3DRender::QTextureImage();
    Qt3DRender::QTextureImage *f2 = new Qt3DRender::QTextureImage();
    Qt3DRender::QTextureImage *f3 = new Qt3DRender::QTextureImage();
    Qt3DRender::QTextureImage *f4 = new Qt3DRender::QTextureImage();
    Qt3DRender::QTextureImage *f5 = new Qt3DRender::QTextureImage();
    Qt3DRender::QTextureImage *f6 = new Qt3DRender::QTextureImage();

    f1->setSource(QUrl("qrc:/rc/images/cubemap1.png"));
    f1->setFace(Qt3DRender::QAbstractTexture::CubeMapNegativeX);
    f2->setSource(QUrl("qrc:/rc/images/cubemap2.png"));
    f2->setFace(Qt3DRender::QAbstractTexture::CubeMapPositiveX);
    f3->setSource(QUrl("qrc:/rc/images/cubemap3.png"));
    f3->setFace(Qt3DRender::QAbstractTexture::CubeMapNegativeY);
    f4->setSource(QUrl("qrc:/rc/images/cubemap4.png"));
    f4->setFace(Qt3DRender::QAbstractTexture::CubeMapPositiveY);
    f5->setSource(QUrl("qrc:/rc/images/cubemap5.png"));
    f5->setFace(Qt3DRender::QAbstractTexture::CubeMapNegativeZ);
    f6->setSource(QUrl("qrc:/rc/images/cubemap6.png"));
    f6->setFace(Qt3DRender::QAbstractTexture::CubeMapPositiveZ);

    cubMap->addTextureImage(f1);
    cubMap->addTextureImage(f2);
    cubMap->addTextureImage(f3);
    cubMap->addTextureImage(f4);
    cubMap->addTextureImage(f5);
    cubMap->addTextureImage(f6);

    textureMaterial->setTexture(cubMap);

    //Cuboid
    m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity);
    m_cuboidEntity->addComponent(cuboid);
    m_cuboidEntity->addComponent(textureMaterial);
    m_cuboidEntity->addComponent(cuboidTransform);

但它给了我一个黑色立方体 我用谷歌搜索了一个例子,但我发现的都是用我不熟悉的 OpenGl 写的。 我相信仅使用 Qt C++ 类是可能的。

我会很感激你的帮助。

这可能与背面剔除有关。

您可以在渲染器中设置以下内容吗?

    activeFrameGraph: ForwardRenderer {
      ...
        frustumCulling: false
    }

当使用 Skybox(基本上是一个带有不同图像的 CuboidMesh)时,这是强制性的。 这里也可能需要。

尝试使用f1->setSource(QUrl::fromLocalFile("...")); 而是f1->setSource(QUrl("...")); 等,并记住有关状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM