Вопрос или проблема
Мне нужно создать изображения 2D перспективных видов 3D моделей. Я думал использовать opengl или vtk, но не знаю, как это сделать с помощью одного из них.
Замечания:
- Мне нужно создать несколько видов, и делать скриншоты нецелесообразно. Я хочу изменить “матрицу камеры”, чтобы создать виды и вывести изображения.
- ОС, с которой я работаю, – это Linux.
Одним из множества вариантов, которые у вас есть, было бы использование Onshape, бесплатной веб-версии CAD программы. Она поддерживает импорт различных 3D моделей, включая STL файлы.
Одной из функций Onshape является возможность создания ортографических чертежей из оригинальной модели. Вы можете создать чертеж с “стандартными” видами спереди, справа и сверху, а также изометрическую визуализацию, или вы можете настроить виды, которые хотите включить.
Чертеж ниже был создан как STL файл, сделанный быстро с помощью Tinkercad (не мой выбор) и импортирован в Onshape.
Ответ или решение
Создание 2D видов из CAD файла с использованием OpenGL или VTK на Linux
Вопрос о создании 2D перспективных видов из 3D моделей является актуальным для специалистов в области компьютерной графики и CAD-систем. Для вашей задачи подойдут как OpenGL, так и VTK, однако каждый из этих инструментов обладает своими особенностями, которые будут рассмотрены в данной статье.
Понимание задач
Прежде всего, важно обозначить основные требования:
- Создание множества 2D видов: Вы хотите автоматизировать процесс получения изображений различных представлений 3D моделей.
- Избежание ручного снятия скриншотов: Необходимо управлять "камерой" программно через изменение матрицы камеры.
- Работа в среде Linux: Это обозначает, что выбранные библиотеки должны быть совместимы с данной операционной системой.
С учетом этих аспектов, сейчас мы обсудим каждый из инструментов.
OpenGL
OpenGL – это мощная графическая библиотека, которая отлично подходит для рисования 2D и 3D графики. Для реализации вашей задачи с OpenGL можно воспользоваться следующими шагами:
-
Инициализация OpenGL:
Убедитесь, что у вас установлены необходимые зависимости:sudo apt install mesa-utils libgl1-mesa-dev
-
Загрузка и отображение 3D модели:
Вам потребуется библиотека для загрузки 3D моделей, например, Assimp:sudo apt install libassimp-dev
-
Настройка матрицы камеры:
Измените параметры камеры для создания рисунков с разных ракурсов. Используйте функцииgluLookAt
или аналогичные для настройки позиции и направления взгляда вашей виртуальной камеры. -
Рендеринг и сохранение изображений:
Вы можете использовать функции OpenGL, такие какglReadPixels
, для захвата текущего кадра и сохранения его в файл:glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); // Затем используйте библиотеку, например, stb_image для сохранения массива в файл
VTK (Visualization Toolkit)
VTK – это еще одна мощная библиотека для визуализации данных, которая также позволяет работать с 3D моделями.
-
Установка VTK:
Установите VTK в вашу систему:sudo apt install libvtk7-dev
-
Импорт 3D моделей:
VTK предоставляет функции для загрузки различных форматов файлов, включая STL и OBJ. Используйте классыvtkSTLReader
илиvtkOBJReader
для чтения модели. -
Создание видов и настройка камеры:
Как и в OpenGL, вы можете работать с классомvtkCamera
. Выбирайте нужные параметры для изменения угла обзора:vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New(); camera->SetPosition(x, y, z); camera->SetFocalPoint(focalX, focalY, focalZ);
-
Сохранение изображений:
VTK также позволяет сохранить 2D представления в виде файлов:vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = vtkSmartPointer<vtkWindowToImageFilter>::New(); windowToImageFilter->SetInput(window); windowToImageFilter->Update(); vtkSmartPointer<vtkPNGWriter> writer = vtkSmartPointer<vtkPNGWriter>::New(); writer->SetFileName("output.png"); writer->SetInputConnection(windowToImageFilter->GetOutputPort()); writer->Write();
Заключение
Оба инструмента, OpenGL и VTK, предоставляют мощные возможности для создания 2D видов из 3D моделей. Выбор зависит от ваших предпочтений и задач. Если вы ищете большую гибкость в рендеринге и хотите контролировать графическую часть, выбирайте OpenGL. Если же вам важна простота работы с высокоуровневыми функциями 3D визуализации, тогда VTK станет хорошим выбором.
В обоих случаях необходимо будет уделить внимание изучению документации и примеров, чтобы реализовать вашу задачу наиболее эффективно.