QML加载并显示带有颜色属性的.ply网格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML加载并显示带有颜色属性的.ply网格相关的知识,希望对你有一定的参考价值。

我正在尝试使用QML从Stanford PLY文件加载一个带有每顶点颜色信息的简单立方体。

我的实体看起来像这样:

Entity
{
    id: circle

    property Material materialPoint: Material {
        effect: Effect {
            techniques: Technique {
                renderPasses: RenderPass {
                    shaderProgram: ShaderProgram {
                        vertexShaderCode: loadSource("qrc:/imports/org/aid/shared/geometry/shaders/point.vert")
                        fragmentShaderCode: loadSource("qrc:/imports/org/aid/shared/geometry/shaders/point.frag")
                    }
                }
            }
        }
        parameters: Parameter { name: "pointSize"; value: 2 }
    }

    property alias translation: circleTransform.translation
    property alias rotation : circleTransform.rotationZ


    Mesh
    {
        id: circleMesh
        source: "qrc:/resources/models/rg.ply"
    }

    Transform
    {
        id: circleTransform
        scale : 1
    }


    components:
        [materialPoint, circleTransform, circleMesh]
}

我也尝试用故意创建的默认Qt材料替换材质属性来解决这个问题:property Material materialPoint: PerVertexColorMaterial {}。不幸的是,场景中没有可见的每顶点颜色。

有没有推荐的方法在QML中导入带有顶点颜色数据的PLY文件? (我想如果用C ++编写逻辑并创建一个专门的QML实体就可以实现这个目的,但功能应该已经可用)。

答案

在Qt3D中加载PLY不包括你注意到的颜色。我担心,目前Qt3D的课程是标准杆。

你可以:

构建并加载支持PLY中颜色属性的Qt Assimp Sceneparser plugin,或者:

用C ++编写自己的Qt3D几何加载器。当需要在每个顶点中加载具有额外数​​据的自定义OBJ模型时,我已经完成了类似的操作。加载器代码非常简单易用,您只需修改它以读取额外数据,您可以修改Qt3D本身的代码,或者创建一个插件并将其加载到您的应用程序中以使其工作。

注意:没有必要创建专门的QML实体。加载器将以QMesh的形式读取您的文件。

以上是关于QML加载并显示带有颜色属性的.ply网格的主要内容,如果未能解决你的问题,请参考以下文章

ios 14 中的 .ply(多边形)格式文件问题

如何在kotlin的片段内显示网格视图?

如何加载相同的 QML 文件并传递不同的属性

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

如何将彩色网格从 meshlab 导入统一!(可能到 3ds max)

如何在带有页面的 QML 中显示模型?