Qml загружает и отображает сетку .ply с атрибутами цвета

Я пытаюсь загрузить простой куб с информацией о цвете каждой вершины из файла Stanford PLY с помощью QML.

Моя сущность выглядит так:

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 {}. К сожалению, в сцене нет видимых цветов для вершин.

Есть ли какой-либо рекомендуемый способ импорта файла PLY с данными цвета вершины в QML? (Я полагаю, что этого можно достичь, если написать логику на C++ и создать для этого специализированный объект QML, но функциональность уже должна быть доступна).

3
0
510
1

Ответы 1

Как вы заметили, загрузка PLY в Qt3D не включает цвета. Боюсь, что на данный момент курс для Qt3D является нормальным.

Вы также можете:

построить и загрузить Плагин Qt Assimp Sceneparser, который поддерживает атрибуты цвета в PLY, или:

Напишите свой собственный загрузчик геометрии Qt3D на C++. Я сделал то же самое, когда мне нужно было загрузить пользовательскую модель OBJ с дополнительными данными в каждой вершине. С кодом загрузчика довольно просто работать, вам нужно только изменить его для чтения дополнительных данных, и вы можете либо изменить код в самом Qt3D, либо создать плагин и загрузить его в свое приложение, чтобы это работало.

Примечание: нет необходим для создания специализированного объекта QML. Загрузчик прочитает ваш файл как QMesh.

Другие вопросы по теме