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

Posted

技术标签:

【中文标题】QML 加载并显示具有颜色属性的 .ply 网格【英文标题】:QML load and display .ply mesh with color attributes 【发布时间】:2018-08-10 12:26:44 【问题描述】:

我正在尝试使用 QML 从斯坦福 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 实体,就可以实现这一点,但功能应该已经可用。

【问题讨论】:

【参考方案1】:

如您所见,在 Qt3D 中加载 PLY 不包括颜色。恐怕目前 Qt3D 的课程标准。

您可以:

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

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

注意:不需要创建一个专门的 QML 实体。加载程序会将您的文件读取为QMesh

【讨论】:

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

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

列数可变的 QML 中继器和 QML 网格布局

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

Qt 5 样式:动态加载 qml 文件

Xamarin 形成具有半径和背景颜色的网格

R:rgl 包的 writePLY 函数未正确写入顶点颜色