我想在Qt 5.8 C++中實現廣告牌。每當我四處走動時,我都想讓一個實體面對相機。 我用QTransform,QDiffuseMapMaterial和QPlaneMesh獲得了相機,第一人稱控件和平面實體。 我在openGL-tutorials中發現了一些沒有矩陣乘法的嘗試,因爲我認爲Qt3D中可能有更簡單的解決方案。Qt3d廣告牌
在第一種方法中,飛機面向攝像機(或多或少),但沒有向上向量,所以它往往是顛倒的。
在第二種方法我用QMatrix4x4 ::的lookAt(常量QVector3D &眼,常量QVector3D &中心,常量QVector3D &時),因爲我聽起來像是正是我需要的,但只要我移動,飛機消失。 我試着用QQuaterions一些更多的東西,但我是一個有點數學不堪重負,準備
// camera
Qt3DRender::QCamera* camera = view->camera();
camera->lens()->setPerspectiveProjection(90.0f, 16.0f/9.0f, 0.1f, 1000.0f);
camera->setPosition(QVector3D(2.0f, 2.0f, 2.0f));
camera->setUpVector(QVector3D(0, 1, 0));
camera->setViewCenter(QVector3D(0, 0, 0));
// controls
Qt3DExtras::QFirstPersonCameraController* camController = new Qt3DExtras::QFirstPersonCameraController(rootEntity);
camController->setCamera(camera);
// emmits the new camera position to rotate function
QObject::connect(camera, &Qt3DRender::QCamera::positionChanged, plane, &Plane::rotate);
// Plane::rotate
void Plane::rotate(QVector3D target)
{
// first
planeTransform->setRotation(QQuaternion::rotationTo(planeTransform->translation(), target));
// second
QMatrix4x4 matrix = planeTransform->matrix();
matrix.lookAt(planeTransform->translation(),target,QVector3D(0,1,0));
planeTransform->setMatrix(matrix);
}