c++ - Qt 3D:如何在每个面上绘制具有不同纹理的立方体?
问题描述
我是 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++ 类是可能的。
我会很感激你的帮助。
解决方案
尝试使用f1->setSource(QUrl::fromLocalFile("..."));
代替f1->setSource(QUrl("..."));
等。记住状态
推荐阅读
- c++ - C++ 中的“扩展”深度优先搜索
- java - 从一维数组 Jave 中检索值
- java - Android Studio 无法识别 android 注解并在标准库中显示错误
- machine-learning - 是什么导致 Google Auto ML 出错并显示“在训练/测试/评估拆分中缺少标签”?
- sapui5 - SAP Ui5 错误-> 执行程序时无法加载格式化程序文件
- python - 绘制 n 网格状结构
- c++ - 在 ConsoleApplication1.exe 中的 0x7A45FF80 (ucrtbased.dll) 处引发 c++ 异常:0xC0000005:访问冲突读取位置 0x00000000
- ios - 限制用户在 iOS App 中截屏
- python-3.x - 抓取时绕过403
- django - 结合用户和个人资料时,signals.py 上的 AttributeError