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

问题描述 投票:1回答:1

我是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);

    cuboidMaterial->setTexture(cubMap);

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

但是它给了我black cube。我已经在Google上搜索了一个示例,但是我发现的全部都是我不熟悉的OpenGl编写的。我相信仅使用Qt C ++类是可能的。

感谢您的帮助。

c++ qt texture-mapping qt3d
1个回答
0
投票

这可能与背面剔除有关。

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

    activeFrameGraph: ForwardRenderer {
      ...
        frustumCulling: false
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.