Все статьи 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++ коде