[英]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.