3DCoat способен комбинировать меши, создавая модель, которая нужна тебе. Он поддерживает три операции:
- Объединение
- Вычитание
- Пересечение
Посмотрим, как это можно делать скриптами.
Создадим две сферы и покажем, что может 3DCoat. В каждой секции будет полный код примера, чтобы ты мог просто скопировать его и запустить.
Обрати внимание, что в результате ты получаешь полноценый меш с аккуратной сеткой. Чтобы увидеть это, переключиьс в скульпт-комнате 3DCoat в режим, где она видна (клавиша W
на клавиатуре или меню "Просмотр / Показать сетку").
Объединение (Add)
void main() {
SculptRoom room;
room.clear().toSurface();
Builder builder;
Mesh a = builder.sphere()
.radius( 70 )
.details( 0.1 )
.build();
Mesh b = builder.sphere()
.radius( 40 )
.position( Vec3( 30, 40, 50 ) )
.details( 0.5 )
.build();
Mesh result = a | b;
room += result;
}
Вычитание (Subtract)
void main() {
SculptRoom room;
room.clear().toSurface();
Builder builder;
Mesh a = builder.sphere()
.radius( 70 )
.details( 0.1 )
.build();
Mesh b = builder.sphere()
.radius( 40 )
.position( Vec3( 30, 40, 50 ) )
.details( 0.5 )
.build();
Mesh result = a - b;
room += result;
}
Пересечение (Intersect)
void main() {
SculptRoom room;
room.clear().toSurface();
Builder builder;
Mesh a = builder.sphere()
.radius( 70 )
.details( 0.1 )
.build();
Mesh b = builder.sphere()
.radius( 40 )
.position( Vec3( 30, 40, 50 ) )
.details( 0.5 )
.build();
Mesh result = a & b;
room += result;
}
Вместе
Т. к. ты, наверняка, захочешь написать что-то посложнее, чем одинокий меш на сцене, объединим все примеры булевых операций над мешами выше и разместим **все** полученные объекты на сцене.
Для этого понадобится знание о доступных в 3DCoat методах трансформации.
void main() {
SculptRoom room;
room.clear().toSurface();
Builder builder;
Mesh a = builder.sphere()
.radius( 70 )
.details( 0.1 )
.build();
Mesh b = builder.sphere()
.radius( 40 )
.position( Vec3( 30, 40, 50 ) )
.details( 0.5 )
.build();
const Vec3 floorShift( 0, 200, 0 );
Mesh add = a | b;
Vec3 floor = Vec3( 0 );
add.tools().transform().position( floor ).run();
room += add;
Mesh subtract = a - b;
floor += floorShift;
subtract.tools().transform().position( floor ).run();
room += subtract;
Mesh intersect = a & b;
floor += floorShift;
intersect.tools().transform().position( floor ).run();
room += intersect;
}
В результате у тебя должна получиться "пирамидка" из сфер... Точнее, из того, что с ними стало после объединения, вычитания и пересечения.
Более сложный код уже может потребовать отладки. В скриптинге 3DCoat она тоже есть.
- См. также
- 🌀 Как создать свой скрипт
-
🌀 Создание мешей из примитивов
-
🌀 Преобразование мешей
-
🌀 Отладка скриптов