Я запускаю приведение лучей в своем коде:
m_rayCaster = new Qt3DRender::QRayCaster(m_rootEntity);
// Connect ray-caster signal to callback/slot
QObject::connect(m_rayCaster, &Qt3DRender::QRayCaster::hitsChanged, this, &MySceneClass::handleRayCasterHits);
// ...
// ...
m_rayCaster->trigger(origin, direction, length);
Результаты заклинателя лучей обрабатываются обратным вызовом / слотом, который выполняет повторное приведение лучей:
void MySceneClass::handleRayCasterHits(const Qt3DRender::QAbstractRayCaster::Hits hits)
{
// ...
// Handle ray caster hits
// ...
// Condition to stop ray casting
m_counter++;
if ( m_counter >= m_size ) {
return;
}
// Recursive ray casting: trigger ray casting again:
m_rayCaster->trigger(origin, direction, length);
}
Проблема заключается в том, что при обратном вызове / слоте MySceneClass::handleRayCasterHits
компонент ray-caster автоматически отключается, и больше нельзя выполнять тесты приведения лучей.Это потому, что для RunMode
установлено значение SingleShot
, как указано в документации .
Одним из решений является установка RunMode
на Continuous
, но это нежелательно, поскольку он делает наложение лучей непрерывно и излишне.Случайно, есть ли другое возможное решение, о котором я не знаю?