使用c++ Qsurface3d中添加发光物体
时间: 2024-03-22 19:41:10 浏览: 15
在C++中添加发光物体到QSurface3D,可以使用QDiffuseSpecularMaterial材料。这个材料可以让物体在光照下产生漫反射和高光效果,并且可以设置发光颜色和强度。
首先,在代码中定义一个QDiffuseSpecularMaterial材料,并将其应用于需要发光的物体上。例如:
```
Qt3DExtras::QDiffuseSpecularMaterial *material = new Qt3DExtras::QDiffuseSpecularMaterial();
material->setDiffuse(QColor(255, 255, 255, 255));
material->setSpecular(QColor(128, 128, 128, 255));
material->setShininess(50);
material->setEmissive(QColor(255, 255, 255, 255));
material->setEmissiveIntensity(1.0f);
Qt3DCore::QEntity *entity = new Qt3DCore::QEntity();
entity->addComponent(mesh);
entity->addComponent(material);
```
然后,使用一个QPointLight来照亮这个物体,并将其应用于场景中。例如:
```
Qt3DRender::QPointLight *light = new Qt3DRender::QPointLight();
light->setColor(QColor(255, 255, 255, 255));
light->setIntensity(1.0f);
light->setConstantAttenuation(0.5f);
light->setLinearAttenuation(0.1f);
light->setQuadraticAttenuation(0.01f);
Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity();
lightEntity->addComponent(light);
lightEntity->setPosition(QVector3D(0, 0, 10));
Qt3DCore::QEntity *sceneEntity = new Qt3DCore::QEntity();
sceneEntity->addComponent(surface);
sceneEntity->addChild(entity);
sceneEntity->addChild(lightEntity);
Qt3DRender::QCamera *camera = view->camera();
camera->setProjectionType(Qt3DRender::QCameraLens::PerspectiveProjection);
camera->setAspectRatio(view->width() / view->height());
camera->setPosition(QVector3D(0, 0, 20));
camera->setViewCenter(QVector3D(0, 0, 0));
```
这样,物体就会在光照下产生漫反射和高光效果,并且发光颜色和强度也可以自定义设置。