{"id":29127817,"url":"https://github.com/dianazabelina/3d-viewer","last_synced_at":"2026-04-24T12:07:50.366Z","repository":{"id":298099163,"uuid":"987823727","full_name":"DianaZabelina/3d-viewer","owner":"DianaZabelina","description":"Program for visualizing wireframe 3D models","archived":false,"fork":false,"pushed_at":"2025-06-25T13:08:23.000Z","size":54,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T14:23:50.143Z","etag":null,"topics":["cpp","education","gtest","gui","mvc","qt","unit-testing","viewer","wireframe"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DianaZabelina.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-21T16:31:26.000Z","updated_at":"2025-06-25T13:08:34.000Z","dependencies_parsed_at":"2025-06-09T12:25:07.195Z","dependency_job_id":"6ee2a583-2907-403d-96e2-117539696d37","html_url":"https://github.com/DianaZabelina/3d-viewer","commit_stats":null,"previous_names":["dianazabelina/3dviewer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DianaZabelina/3d-viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DianaZabelina%2F3d-viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DianaZabelina%2F3d-viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DianaZabelina%2F3d-viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DianaZabelina%2F3d-viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DianaZabelina","download_url":"https://codeload.github.com/DianaZabelina/3d-viewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DianaZabelina%2F3d-viewer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262690385,"owners_count":23349168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","education","gtest","gui","mvc","qt","unit-testing","viewer","wireframe"],"created_at":"2025-06-30T01:01:57.402Z","updated_at":"2026-04-24T12:07:50.324Z","avatar_url":"https://github.com/DianaZabelina.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 3D Viewer\n\n3D Viewer — это учебный проект, в рамках которого реализована программа для визуализации каркасной модели в трехмерном пространстве на C++ с применением объектно-ориентированного подхода.\n\n## Содержание\n\n- [Введение](#введение)\n- [Требования к проекту](#требования-к-проекту)\n    - [Основное задание](#part-1-основное-задание)\n    - [Дополнительно. Настройки](#part-2-дополнительно-настройки)\n    - [Дополнительно. Запись](#part-3-дополнительно-запись) \n\n## Введение\n\nВ рамках проекта разработано приложение для отображения 3D-моделей в каркасном виде. Программа поддерживает загрузку моделей в формате .obj, их трансформации и настройку визуальных параметров отображения.\n\nПроект выполнен в составе команды. Моя зона ответственности включала:\n\n- разработку элементов графического пользовательского интерфейса;\n- построение структуры окна приложения и интерфейса взаимодействия (view);\n- составление пользовательской документации;\n- ручное тестирование элементов интерфейса: проверка работы кнопок и полей ввода, соответствие логике и требованиям проекта.\n\n## Требования к проекту\n\nНиже приведены требования к реализации проекта 3D Viewer.\n\n## Part 1. Основное задание\n\n- Программа должна быть разработана на языке C++ стандарта C++17.\n- Код программы должен находиться в папке src.\n- При написании кода необходимо придерживаться Google Style.\n- Сборка программы должна быть настроена с помощью Makefile со стандартным набором целей для GNU-программ: all, install, uninstall, clean, dvi, dist, tests. Установка должна вестись в любой другой произвольный каталог.\n- Программа должна быть разработана в соответствии с принципами объектно-ориентированного программирования, структурный подход запрещен.\n- Должно быть обеспечено полное покрытие unit-тестами модулей, связанных с загрузкой моделей и аффинными преобразованиями.\n- В один момент времени должна быть только одна модель на экране.\n- Программа должна предоставлять возможность:\n    - Загружать каркасную модель из файла формата obj (поддержка только списка вершин и поверхностей);\n    - Перемещать модель на заданное расстояние относительно осей X, Y, Z;\n    - Поворачивать модель на заданный угол относительно своих осей X, Y, Z;\n    - Масштабировать модель на заданное значение.\n- В программе должен быть реализован графический пользовательский интерфейс, на базе любой GUI-библиотеки с API для C++:\n  * Для Linux: GTK+, CEF, Qt, JUCE;\n  * Для Mac: GTK+, CEF, Qt, JUCE, SFML, Nanogui, Nngui.\n- Графический пользовательский интерфейс должен содержать:\n    - Кнопку для выбора файла с моделью и поле для вывода его названия;\n    - Зону визуализации каркасной модели;\n    - Кнопку/кнопки и поля ввода для перемещения модели;\n    - Кнопку/кнопки и поля ввода для поворота модели;\n    - Кнопку/кнопки и поля ввода для масштабирования модели; \n    - Информацию о загруженной модели — название файла, кол-во вершин и ребер.\n- Программа должна корректно обрабатывать и позволять пользователю просматривать модели с деталями до 100, 1000, 10 000, 100 000, 1 000 000 вершин без зависания (зависание — это бездействие интерфейса более 0,5 секунды).\n- Программа должна быть реализована с использованием паттерна MVC, то есть:\n    - не должно быть кода бизнес-логики в коде представлений;\n    - не должно быть кода интерфейса в контроллере и в модели;\n    - контроллеры должны быть тонкими.\n- Необходимо использовать минимум три различных паттерна проектирования (например, фасад, стратегия и команда).\n- Классы должны быть реализованы внутри пространства имен `s21`.\n- Для осуществления афинных преобразований могут использоваться матрицы из библиотеки из предыдущего проекта s21_matrix+.\n\n*Замечание:* **Не загружай тяжелые файлы (\u003e10 Мб) в гит.**\n\n## Part 2. Дополнительно. Настройки\n\n- Программа должна позволять настраивать тип проекции (параллельная и центральная).\n- Программа должна позволять настраивать тип (сплошная, пунктирная), цвет и толщину ребер, способ отображения (отсутствует, круг, квадрат), цвет и размер вершин.\n- Программа должна позволять выбирать цвет фона.\n- Настройки должны сохраняться между перезапусками программы.\n\n## Part 3. Дополнительно. Запись\n \n- Программа должна позволять сохранять полученные («отрендеренные») изображения в файл в форматах bmp и jpeg.\n- Программа должна позволять по специальной кнопке записывать небольшие «скринкасты» — текущие пользовательские аффинные преобразования загруженного объекта в gif-анимацию (640x480, 10fps, 5s).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdianazabelina%2F3d-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdianazabelina%2F3d-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdianazabelina%2F3d-viewer/lists"}