Как хранить полигоны/фейсы04.02.2026, 03:46. Показов 2510. Ответов 46
Метки нет (Все метки)
Добрый день
Часто говорят "3D объект состоит из треугольников", но это не совсем верно (мягко говоря). В общем случае объект может содержать примитивы (фейсы) ссылающиеся на любое число вертексов. Условная классификация {0} - точка (используется 1 вертекс с индексом 0, сами вертексы хранятся отдельно) {0, 1} - линия {0, 1, 4} - треугольник {0, 1, 4, 5} - квадрангл (4-угольник) {0, 1, 4, 5 .. 100} - "комплексный" полигон/контур Также каждый фейс может иметь свои данные uint32 material_index - индекс материала (часто) uint32 color - цвет (иногда) Vec3f normal - нормаль (редко) Предложите структуру данных для хранения фейсов Спасибо
0
|
|
| 04.02.2026, 03:46 | |
|
Ответы с готовыми решениями:
46
Загрузка точек полигоны Boost Как в int* var хранить массивы? В чем суть задания? |
|
Вездепух
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
|
|
| 04.02.2026, 04:05 | |
|
Так а в чем проблема с очевидным решением: фейс - массив индексов вершин (раз уж дано, что вершины хранятся индексами, а не явно)?
0
|
|
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||||||||
| 04.02.2026, 12:34 | ||||||||
|
Если под 3D объектом имеешь в виду полигональный меш (полигональную сетку), то согласен, что не только из треугольников. Но именно меш из треугольников считается самым лучшим для GPU и всяких вычислений, поскольку любые три точки гарантированно лежат в одной плоскости. Многие современные игровые движки, хочешь ты этого или нет, в конечном итоге все равно превращают модельку в триангулированную полигональную сетку перед отрисовкой в целях оптимации. Меш из треугольников это просто эталон. На втором месте по красоте - меш, состоящий из четырухугольников (Quads). Такой меш удобен во время трехмерного моделирования, скульпитинга и прочих операций. С ними всегда секси топология. Однако, все равно твой красивый меш из четырехугольников будет превращен в треугольный меш, т.к. каждый четырехугольник будет разбит на два треугольника. Что касается остальных многоугольников (N-gons) - то это просто извращение. Нормальными людьми используются крайне редко. Обычно, такие многоугольники получаются у нубов с кривыми руками во время моделирования. При автоматическом преобразовании в треугольный меш могут появляться артефакты. Но 3d объекты это не только полигональные меши. Есть же еще воксельные, параметрические и процедурные объекты.
v - индекс вершины vt - индекс текстурной координаты (опционально) vn - индекс нормали (опционально) Разумеется, в этом же файле должны быть координаты для этих индексов. Чем не устраивает такой подход? Для текстового формата вполне неплохой подход. Или ты хочешь использовать бинарный формат?
0
|
||||||||
|
Just Do It!
|
||
| 04.02.2026, 12:49 | ||
|
мой прогноз: "Нам потребуется не менее трёх лет, чтобы тщательно "разобрать" обж файлы, но мы точно закончим эту работу к 2077 году"
0
|
||
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||
| 04.02.2026, 12:56 | ||
|
XLAT, у Игора3д нет фантазии. Может же человек спросить не про "структуру данных для хранения фейсов", а, например, про "структуру данных для хранения состояния кубика рубика")
Добавлено через 2 минуты XLAT, или, например, может же предложить совместно разработать игру "Балда". Интереснее, чем кроссворд. Скажем, сетевая Балда Добавлено через 2 минуты
0
|
||
|
Just Do It!
|
||
| 04.02.2026, 12:57 | ||
|
я сёдня рано утром прочел пост Игоря про фейсы, и подумал, ну, явно же не стоит уже писать ему про обж-файлы, когда я ему уже ранее написал целый парсер... если он уже забыл, то какой смысл писать заново? - опять же забудет...
0
|
||
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||
| 04.02.2026, 12:57 | ||
|
или администрация форума платит ему з/п, чтобы тот постоянно строчил новые темы
1
|
||
| 04.02.2026, 17:54 [ТС] | |||||||
0
|
|||||||
|
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 495
|
|
| 04.02.2026, 19:02 | |
|
Igor3D, так вообще не делается. Никто для каждого фейса не хранит флаги и прочее, модель делится на сабсеты (в терминах Direct3D) - это части модели, объединённые общими стейтами, то есть их можно рендерить за один DIP. Фейсы, как правило, вообще не используются, а перед сохранением в модель триангулируются. Каждый сабсет - это вертексный буфер, со всеми его вертексами, индексный буфер на все его треугольники в формате TriangleList и набор свойств, типа текстуры, материала. Сама информация со ссылками на текстуры и материалы может и не храниться, просто мы знаем, что эти свойства у сабсетов разные. Или даже одинаковые, но сабсет выделен в отдельную от остальных часть потому, что его нужно отдельно от модели двигать (пример - колесо от машины).
0
|
|
| 04.02.2026, 20:53 [ТС] | |||||||
Не по теме: Конечно если известно что модели будут "только такие", и никаких других, то все хорошо. Но в общем случае нет.
0
|
|||||||
|
Модератор
|
|||
| 04.02.2026, 22:05 | |||
|
0
|
|||
|
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 495
|
|||
| 04.02.2026, 22:41 | |||
|
Понятно, что TriangleStrip (или TriangleFun) в общем случае требует меньше повторных расчётов уже раз просчитанных вертексов, но видеокарты уже давно умеют кэшировать такие расчёты в рамках одного DIP.
0
|
|||
| 05.02.2026, 00:25 [ТС] | ||||
0
|
||||
| 06.02.2026, 13:29 [ТС] | |
|
В общем, тема стала жертвой фетишизма
Это был простой вопрос С++ для начинающих, во всяком случае так думал ТС. Кстати вопрос очень банальный, давно известный. Разве стартовый пост упоминает о рисовании вообще, об использовании GPU, разве спрашивалось как это делается в играх (что мы считаем шедевром инженерной мысли)? Ничего такого там нет, есть масса других задач. Ну и отвечайте "по теме", не суйте ваши игры куда надо и не надо
0
|
|
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||||
| 06.02.2026, 14:14 | ||||
|
Бинарный формат занимает меньше места, скорость чтения/записи выше, нет потери точности. Текстовый формат выигрывает в читаемости (а стало быть в ручном редактировании в любом текстовом редакторе), но размер больше и парсер медленный, а также будут потери точности (например, у координат с плавающей запятой). например, obj текстовый, glb бинарный... Добавлено через 12 минут
0
|
||||
|
Модератор
|
||||
| 06.02.2026, 14:27 | ||||
|
Если например для 3д печати, то там свои особенности и полигоны там не применимы. А вообще хранить стоит в том формате в котором удобнее и быстрее будет обработка.
0
|
||||
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||
| 06.02.2026, 14:49 | ||
|
0
|
||
|
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 495
|
||
| 06.02.2026, 14:54 | ||
|
Представил, но это нонсенс - если в вертексе все координаты float имеют целочисленные значения, то в текстовом виде действительно может занять меньше места.
0
|
||
|
6241 / 2954 / 1047
Регистрация: 01.06.2021
Сообщений: 10,979
|
||||
| 06.02.2026, 15:37 | ||||
|
то, что бинарный меньше места занимает - это и ежу понятно и я сам об этом писал выше но я встречал уже такие случаи, когда PPMD, например, текстовый сжимал лучше, чем бинарный. Тут нужно проверить на разных алгоритмах сжатия и на разных данных. Т.е. проверять на конкретном случае.
0
|
||||
|
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 495
|
||
| 06.02.2026, 16:04 | ||
|
Вот я сгенерировал 100000 случайных векторов и сохранил в двух форматах, в текстовом формате всё минималистично - никаких лишних пробелов, никаких нулей перед десятичной точкой - всё равно в архиве бинарник меньше, даже несжатый бинарник меньше txt с макс сжатием:
0
|
||
| 06.02.2026, 16:04 | |
|
Помогаю со студенческими работами здесь
20
как хранить поток? Как хранить строки в кодировке UTF-8?
Задача на алгоритм Дейкстры (как лучше хранить информацию?) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|