3DCoat
3D-COAT 4.9.xx
3DCoat is the one application that has all the tools you need to take your 3D idea from a block of digital clay all the way to a production ready, fully textured organic or hard surface model.
|
В комнате ретопологии есть много инструментов для 3D-моделлера. Неплохо в будущем реализовать **полный** набор инструментов. Желающие?
Комната ретопологии - это, по сути, низкополигональное моделирование. С точки зрения художника, эта комната должна находиться в другом месте. Возможно, позже переименуем или перенесём её. Ваши мысли?
Режим комнаты (выбранный инструмент) задаётся в UV_map_Tool::UV_WorkMode
и может принимать одно из значений, которые определены в дефайнах RTP_ADDSPLIT
, ..., RTP_SHARPPAINT
.
Для построения интерфейса этой комнаты возвращается енумератор, который содержит список всех режимов. См. RetopoTool::GetSubModesEnum()
. Значение этого енумератора присваивается UV_map_Tool::UV_WorkMode
при выборе инструмента. Затем, RetopoTool::GetExtraCommandsEnum()
возвращает контекст этого инструмента.
Например, если нужно добавить новый инструмент в режиме "Select faces":
RetopoTool::GetExtraCommandsEnum()
сравнение UV_WorkMode == RTP_SELECT
и добавляем в енумератор уникальное значение. Числовое значение инструмента не должно превышать 1024.RetopoTool::ActivateExtraCommandID()
добавляем case
со своим ID инструмента.Поглядим на примере инструмента Extrude Faces
.
Функция RetopoTool::sfExtrudeFaces()
(как она связана с UI ты знаешь, т. к. вдумчиво прочёл абзацы выше) создаёт гизмо и тут же набор рёбер, которые совпадают с фейсом. Дальше художник может просто двигать этот фейс, используя гизмо.
Для доступа к инструментам в комнате используй uvtool().Mesh вместо прямого обращения к m_RetopoTool
. Причина: существует несколько экземпляров меша в разных комнатах.
Топология меша хранится в структуре ClusteredMesh
.
Как программист ты можешь разобраться что где лежит прочитав описания к полям структуры. Если хочешь послушать - глянь пояснения Андрея Шпагина в этой лекции. Например, из неё узнаешь, что самые полезные структуры по обходу меша - ClusteredMesh::FacesOnEdges
и ClusteredMesh::VertsNearVerts
. А после любого изменения меша следует вызвать ClusteredMesh::CreateTopoLists() для поддержки целостности или (что лучше), позаботиться в своём инструменте, чтобы он сам учёл изменения в топологии.
Также узнаешь, что наличие симметрии в 3DCoat немного усложнит разработку твоей тулзы. Поэтому вначале тестируй тулзу без симметрии, затем включай её...