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

问题描述 投票:0回答:1

我正在尝试使用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实体就可以实现这个目的,但功能应该已经可用)。

qt graphics 3d qml qt3d
1个回答
0
投票

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

你可以:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.