[英]Qt3d Billboarding
我正在嘗試在Qt 5.8 C ++中實現廣告牌。 每當我四處走動時,我都想讓實體面對鏡頭。 我有了QTransform,QDiffuseMapMaterial和QPlaneMesh的照相機,第一人稱控制和飛機實體。 我已經做了一些嘗試,沒有在openGL教程中發現的矩陣乘法,因為我認為Qt3D中可能有一個更簡單的解決方案。
在第一種方法中,飛機(或多或少)面向相機(但或多或少),但沒有上矢量,因此通常是上下顛倒的。
在第二種方法中,我使用了QMatrix4x4 :: lookAt(const QVector3D&eye,const QVector3D&center,const QVector3D&up),因為聽起來我確實很需要,但是一旦我移動,飛機便消失了。 我用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);
}
這個
// first
planeTransform->setRotation(QQuaternion::rotationTo(planeTransform-
>translation(), target));
文檔對我來說似乎非常可疑:
QQuaternion QQuaternion :: rotationTo(const QVector3D&from,const QVector3D&to)
返回最短弧四元數,以從矢量描述的方向從旋轉到矢量to描述的方向。
因此,兩個參數都必須是方向方向。 那么第一個論點就是飛機的法線?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.