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

时间:2018-08-10 12:26:44

标签: qt graphics 3d qml qt3d

我正在尝试使用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材质替换material属性: property Material materialPoint: PerVertexColorMaterial {}。 不幸的是,场景中没有可见的每顶点颜色。

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

1 个答案:

答案 0 :(得分:0)

在Qt3D中加载PLY不包含您所注意到的颜色。恐怕目前Qt3D的课程还没达到标准。

您可以:

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

用C ++编写自己的Qt3D几何图形加载器。当需要在每个顶点中加载带有额外数据的自定义OBJ模型时,我已经做了类似的事情。加载程序代码非常简单易用,您只需对其进行修改即可读取额外的数据,并且可以在Qt3D本身中修改代码,也可以创建一个插件并将其加载到您的应用程序中以使其正常工作。

注意:创建专门的QML实体不是。加载程序将以QMesh的形式读取您的文件。