簡體   English   中英

Qt3d廣告牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM