Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. qt3D中为什么使用自定义材质 QMaterial 赋给实体没有效果
Forum Updated to NodeBB v4.3 + New Features

qt3D中为什么使用自定义材质 QMaterial 赋给实体没有效果

Scheduled Pinned Locked Moved Unsolved Chinese
2 Posts 2 Posters 406 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    BAIY
    wrote on last edited by
    #1

    我使用自定义的材质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;
    

    }
    自定义材质运行结果:一片空白
    11aecba3-ebf6-403e-ac2f-f96816bd26b5-image.png
    预置材质运行结果:黑色圆环
    8d74384f-ae16-4795-8e75-265f61831fd1-image.png
    请大神帮忙看看哪里有问题吗,自定义材质设置的不对吗,我用的是官方示例啊,请大神解惑,多谢!!!

    1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Please write in english or use the appropriate subforum. Moved to Chinese subforum

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      0
      • Christian EhrlicherC Christian Ehrlicher moved this topic from Qt Creator and other tools on

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved