首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT3D:如何在每个脸上绘制不同纹理的立方体?

QT3D:如何在每个脸上绘制不同纹理的立方体?
EN

Stack Overflow用户
提问于 2019-10-29 16:55:01
回答 2查看 1.1K关注 0票数 4

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

创建一个立方体与6不同的纹理在每个脸.到目前为止,这是我尝试过的:

代码语言:javascript
复制
// 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++类是可能的。

我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-10-31 11:56:25

这可能与后脸剔除有关。

你能在你的渲染器中设置以下内容吗?

代码语言:javascript
复制
    activeFrameGraph: ForwardRenderer {
      ...
        frustumCulling: false
    }

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

票数 1
EN

Stack Overflow用户

发布于 2019-11-10 15:58:33

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58612095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档