Все статьи / Point Cloud Library

Эта статья познакомит вас с библиотекой Point Cloud Library (https://pointclouds.org), позволяющей создавать, загружать, обрабатывать, сохранять и визуализировать облаков точек, получаемые с помощью 3D сканеров, медицинского оборудования, сенсоров в робототехнике и из других источников


Установка PCL на Windows

Для работы над примерами потребуется установить Point Cloud Library. Это можно сделать с помощью vcpkg:

vcpkg install pcl:x64-windows

Процесс сборки и установки может быть достаточно долгим.

Подготовка проекта

  • Обновите или клонируйте репозиторий github.com/cg-course-2018/QtLabs2D
  • Переключитесь на ветку “sample16”, создайте от неё новую ветку, уникальную для вас - например, “sample16_%ФАМИЛИЯ%”
  • Откройте QtLabs2D.sln, соберите и запустите проект Sample16
  • Вы увидите следующее:

Скриншот

С помощью горячих клавиш WASD вы можете управлять камерой.

Задание cg16.1 - включить визуализацию с помощью облака точек

  • Найдите в коде все комментарии вида // TODO: (cg16.1)
  • Выполните то, что указано в комментариях
  • Соберите, запустите и визуально оцените качество триангуляции
    • алгоритм GreedyProjectionTriangulation обеспечивает низкое качество и высокую скорость триангуляции

Задание cg16.2 - включить вычисление нормалей методом наименьших квадратов

  • Найдите в коде все комментарии вида // TODO: (cg16.2)
  • Выполните то, что указано в комментариях
  • Соберите, запустите и сравните разницу в отображении двух поверхностей
    • у правой поверхности нормали вычислены методом наименьших квадратов

Задание cg16.3 - заменить материал на цвет вершины

На данный момент в примере фрагментный шейдер принимает параметры материала, которые применяются ко всей поверхности:

// Represents surface material passed to shader.
struct Material
{
    vec4 emission;
    vec4 diffuse;
    vec4 specular;
};

Требуется доработать фрагментный и вершинный шейдеры, чтобы вместо uniform-переменной материала для вычисления цвета использовался атрибут in vec3 i_color;, который будет передан из C++ кода, а затем перенаправлен из вершинного шейдера в фрагментный шейдер.

  • Цвет фрагмента является заменой для diffuse/specular компонент цвета материала
  • Для получения emission компонента предлагается умножать цвет фрагмента на константу 0.2
  • Не забудьте обновить отображение шейдеров в методе PointCloudScene::initializePhongProgram() в C++ коде