Qt3D Billboards:如何让飞机始终面对相机

Qt3D Billboards: how to make plane always face to camera

我尝试用camera的viewVector使平面正对camera,但是当camera向左或向右旋转时,它会顺时针或逆时针旋转。

能不能不顺时针或逆时针转动,让飞机一直对着相机?

我想camera->upVector()也许可以帮到我,但我不知道怎么用。

我的代码:

class planeTransformClass : public Qt3DCore::QTransform {

public:
    planeTransformClass( Qt3DCore::QNode *entity = nullptr ) :Qt3DCore::QTransform(entity) {}

signals:
    void faceTo( QVector3D v ) {
        setRotation(QQuaternion::rotationTo(QVector3D(0,1,0), -v));
    } ;
};
// Background
        Qt3DCore::QEntity *planeEntity = new Qt3DCore::QEntity(rootEntity);
        Qt3DExtras::QPlaneMesh *planeMesh = new Qt3DExtras::QPlaneMesh(planeEntity);
        planeMesh->setHeight(2);
        planeMesh->setWidth(2);

        Qt3DExtras::QTextureMaterial planeMaterial = new Qt3DExtras::QTextureMaterial(planeEntity);
        Qt3DRender::QTexture2D *planeTexture = new Qt3DRender::QTexture2D(planeMaterial);

        FlippedTextureImage *planeTextureImage = new FlippedTextureImage(planeTexture);
        planeTextureImage->setSize(QSize(3000, 3000));
        planeTexture->addTextureImage(planeTextureImage);
        planeMaterial->setTexture(planeTexture);
        planeMaterial->setAlphaBlendingEnabled(true);

        // Transform
        planeTransformClass planeTransform = new planeTransformClass(planeEntity);
        planeTransform->setRotationX(90);
        planeTransform->setTranslation(QVector3D(2, 0, 0));

        planeEntity->addComponent(planeMesh);
        planeEntity->addComponent(planeMaterial);
        planeEntity->addComponent(planeTransform);

        // connect camera's viewVectorChanged
        camera->connect( camera, &Qt3DRender::QCamera::viewVectorChanged, 
                 planeTransform, &planeTransformClass::faceTo);

使用几何着色器的解决方案

已有C++翻译this QML code that I tried to translate(使用几何着色器):

https://github.com/ismailsunni/qt3d-custom-shader

我自己的翻译可以找到here. It works now after solving the issues mentioned in


没有几何着色器的解决方案

我得到了一个基于 this bug report. You can find my implementation on GitHub 的不同版本 运行ning。当相机移动时,广告牌不会改变它们的大小,即像其他所有对象一样在屏幕上变得越来越小,但我希望你能处理它。

在 master 分支上,由于某种原因,图像也会移动,如下图所示:

no_instanced_rendering 分支不使用实例化渲染并正确显示所有内容。

编辑 对不起,我没有使用你的例子,但我没有时间再调整它。查看与我提到的错误报告相关的 patch。这个人用这个效果实现了一个material,你应该能够提取它并使它成为运行。