如何使用大球体上的纹理作为背景?

时间:2018-07-19 12:35:25

标签: qt5 qt3d 3d-rendering

我想使用Qt(版本5.11)创建3D场景。

我想将JPG图像映射到几乎无限的球体上,以支持3D场景的背景。

这是相关的源代码:

Qt3DCore::QEntity *aGalaxyBackground = new Qt3DCore::QEntity(rootEntity);
Qt3DExtras::QSphereMesh* aGalaxyBackgroundSphereMesh = new Qt3DExtras::QSphereMesh();
aGalaxyBackgroundSphereMesh->setRadius(100);
aGalaxyBackground->addComponent(aGalaxyBackgroundSphereMesh);

Qt3DRender::QTextureLoader* aGalaxyBackgroundLoader = new Qt3DRender::QTextureLoader(aGalaxyBackground);
Qt3DExtras::QTextureMaterial* aGalaxyBackgroundMaterial = new Qt3DExtras::QTextureMaterial(aGalaxyBackground);
aGalaxyBackgroundLoader->setSource(QUrl::fromLocalFile("D:/Qt/starfield.jpg"));
aGalaxyBackgroundMaterial->setTexture(aGalaxyBackgroundLoader);
aGalaxyBackground->addComponent(aGalaxyBackgroundMaterial);

此方法的问题是JPG映射在球的“外部”表面上。当相机在球体内时,背景是不可见的。

这种方法有什么问题?

1 个答案:

答案 0 :(得分:2)

您可以将球体半径设置为-100而不是100,并且法线向内指向。这样,纹理将从球体内部而不是外部可见。