Несколько трансформов в одной сущности

Попытался создать простую программу, показывающую тор с подсветкой. Все работает, но есть проблема с положением света.

При попытке создать новое преобразование для света после создания тора преобразование света используется для нового положения тора вместо света.

Пробовал менять значения и перемещать addComponent, но безрезультатно.

Фото результата: Фото результата

Вот код:

#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QTorusMesh>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DCore/QEntity>
#include <Qt3DCore/QTransform>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QPointLight>

Qt3DCore::QEntity *createScene();

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    Qt3DExtras::Qt3DWindow view;

    Qt3DCore::QEntity *rootEntity = createScene();

    Qt3DRender::QCamera *camera =view.camera();
    camera->lens()->setPerspectiveProjection(60,(float)view.width()/view.height(),0.1f,1000.0f);
    camera->setPosition(QVector3D(0.0f,0.0f,40.0f));
    camera->setViewCenter(QVector3D(0.0f,0.0f,0.0f));

    view.setRootEntity(rootEntity);
    view.show();
    return app.exec();
}

Qt3DCore::QEntity *createScene()
{
    Qt3DCore::QEntity *resultEntity = new Qt3DCore::QEntity;

    Qt3DExtras::QTorusMesh *torusMesh = new Qt3DExtras::QTorusMesh(resultEntity);
    torusMesh->setRadius(15.0f);
    torusMesh->setMinorRadius(6.0f);
    torusMesh->setSlices(16);
    torusMesh->setRings(32);

    Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial(resultEntity);

    Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform(resultEntity);

    resultEntity->addComponent(torusMesh);
    resultEntity->addComponent(torusMaterial);
    resultEntity->addComponent(torusTransform);

    Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(resultEntity);

    Qt3DRender::QPointLight *pointLight = new Qt3DRender::QPointLight(lightEntity);

    Qt3DCore::QTransform *lightTransform = new Qt3DCore::QTransform(resultEntity);
    lightTransform->setTranslation(QVector3D(0.0f,0.0f,30.0f));

    resultEntity->addComponent(pointLight);
    resultEntity->addComponent(lightTransform);

    return resultEntity;
}

Ответы (1 шт):

Автор решения: Volodymyr

Немного слепой и не увидел что использую одну сущность для 2 предметов. Нужно изменить

resultEntity->addComponent(pointLight);
resultEntity->addComponent(lightTransform);

На

lightEntity->addComponent(pointLight);
lightEntity->addComponent(lightTransform);
→ Ссылка