-
我使用自定义的材质QMaterial 赋给一个三维圆环,显示为一片空白,而使用预置材质QPhongMaterial可以正常显示。以下是我的源码:
Qt3DCore::QEntity* createTorusWithGradient(Qt3DCore::QEntity* rootEntity)
{
Qt3DCore::QEntity* torusEntity = new Qt3DCore::QEntity(rootEntity);// 圆环网格 Qt3DExtras::QTorusMesh* torusMesh = new Qt3DExtras::QTorusMesh(torusEntity); torusMesh->setRadius(5.0f); torusMesh->setMinorRadius(1.0f); torusMesh->setRings(100); torusMesh->setSlices(20); torusEntity->addComponent(torusMesh); // 变换组件(可选) Qt3DCore::QTransform* transform = new Qt3DCore::QTransform(torusEntity); transform->setScale3D(QVector3D(1.5, 1.5, 01.5)); transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 60.0f)); torusEntity->addComponent(transform); Qt3DExtras::QPhongMaterial* torusMaterial = new Qt3DExtras::QPhongMaterial(); torusMaterial->setDiffuse(QColor(QRgb(0x000000))); QMaterial* material1 = new QMaterial(torusEntity); QMaterial* material2 = new QMaterial(torusEntity); // Create effect, technique, render pass and shader QEffect* effect1 = new QEffect(); QTechnique* gl3Technique = new QTechnique(); QRenderPass* gl3Pass = new QRenderPass(); QShaderProgram* glShader = new QShaderProgram(); // Set the shader on the render pass gl3Pass->setShaderProgram(glShader); // Add the pass to the technique gl3Technique->addRenderPass(gl3Pass); // Set the targeted GL version for the technique gl3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL); gl3Technique->graphicsApiFilter()->setMajorVersion(3); gl3Technique->graphicsApiFilter()->setMinorVersion(3); gl3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile); // Add the technique to the effect effect1->addTechnique(gl3Technique); // Set the effect on the materials material1->setEffect(effect1); material2->setEffect(effect1); // Set different parameters on the materials const QString parameterName = QStringLiteral("color"); material1->addParameter(new QParameter(parameterName, QColor::fromRgbF(0.0f, 1.0f, 0.0f, 1.0f))); material2->addParameter(new QParameter(parameterName, QColor::fromRgbF(1.0f, 0.0f, 1.0f, 1.0f))); // 添加组件到实体 torusEntity->addComponent(material1); // 监听编译状态 QObject::connect(shaderProgram, &Qt3DRender::QShaderProgram::statusChanged, [=](Qt3DRender::QShaderProgram::Status status) { if (status == Qt3DRender::QShaderProgram::Error) { qDebug() << "Shader Error:" << shaderProgram->log(); } }); return torusEntity;
}
自定义材质运行结果:一片空白
预置材质运行结果:黑色圆环
请大神帮忙看看哪里有问题吗,自定义材质设置的不对吗,我用的是官方示例啊,请大神解惑,多谢!!! -
Please write in english or use the appropriate subforum. Moved to Chinese subforum
-
1/2