gpt4 book ai didi

c++ - Qt 3D : How to draw a cube with different textures on each face?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:44 24 4
gpt4 key购买 nike

我是 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)时,这是强制性的。这里也可能需要。

关于c++ - Qt 3D : How to draw a cube with different textures on each face?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com