среда, 10 декабря 2014 г.

Еще один шаг на пути к 3D манекену.

Иногда приходит время и к вам приходит осознание, что вы знаете как это можно сделать. И вы решаетесь бросить все и сделать это. Так было и в этот раз. Сейчас в проекте несколько скучный этап исправления ошибок, а еще эти разговоры о экспорте и импорте в 3D форматы несколько меня раззадорили.


Иногда немножко злости делают чудеса. После разговоров я опят вернулся к идее создания экспорта раскладки в Wavefront .obj файл. Благо формат очень простой. Всего то нужно что координаты точек, подумал я. :) И глубоко ошибался, но это было уже потом.

Qt имеет механизм Qt Paint System который позволяет добавлять поддержку своих форматов. Как раз то что нам нужно. Документация не очень однозначная, но взяв за пример реализацию SVG в Qt, вот где сила отрытых кодов, я принялся за дело.

Главная идея была следующая. Если у вас есть чертеж выкройки. Например вот такой.


Вы создали детали без прибавок на швы. А они просто не нужны здесь. Потом поясню почему.


Создали раскладку.

Теперь вы эти детали можете экспортировать вместо обычного графического формата (.ps, .eps, .png, .svg, .pdf) в Wavefront .obj файл.


На реализацию идеи я истратил 3 дня. У меня было несколько проблем которые предстояло решить:
  • Сохранение данных. Все тот же злосчастный Qt Paint System, который все не как не поддавался.
  • Конвертировать положения точек с одной системы координат (оконной) в систему координат принятую в 3D. С небольшими изменениями я использовал формулу со статьи OpenGL: преобразование координат.
  • Ну и конечно я совсем забыл что в 3D все фигуры разбивают на треугольники с помощью алгоритмов триангуляции. Пришлось искать готовый алгоритм и как уже понятно я его нашел.
  • На этом история не закончилась. Оказалось, что найденный мной алгоритм просто соединяет все точки треугольниками. Это несколько не то что мне нужно было. Пришлось отбрасывать ненужные треугольники путем сравнения площадей многоугольников.


Таким образом мне удалось экспортировать детали в .obj файл. Но что это дает?


Само по себе мало что, вот в связке с такими проектами как Blender и Makehuman может выйти практически полноценный 3D манекен.

Берем тело, сгенерированное проектом Makehuman, с нужными для выкройки параметрами и детали выкройки и открываем в Blender.


А после этого в дело вступает симуляция ткани. Это делать можно было и до нас. Но все это не годилось для тестирования. Для меня больше похоже на лепку одежды.)


В нашем же случаи детали уже имеют правильную форму, остается их только соединит. Но это все в теории, посмотрим как выйдет на практике.

Сразу виден один недостаток. После невнесения изменений в чертеж склеивание придется проделывать сначала. Для устранения этого недостатка нужна более тесная интеграция двух проектов. Вот где стоит смотреть в сторону плагина для блендера.

Пока я еще не решил стоит ли включать эту функцию в проект. Жду отзывов.

1 комментарий: