// Создаём две сферы и объединяем их тремя способами.
void main() {
// подготавливаем сцену
SculptRoom sculpt;
sculpt.clear().toSurface();
Mesh a, b;
const Vec3 dir = Vec3( 0, 1, 0 );
// I) add
float delta = 0;
Vec3 shift = dir * delta;
{
build( a, b, shift );
const Mesh ab = a | b;
sculpt += ab;
}
// II) subtruct
delta += 200;
shift = dir * delta;
{
build( a, b, shift );
const Mesh ab = a - b;
sculpt += ab;
}
// III) intersect
delta += 200;
shift = dir * delta;
{
build( a, b, shift );
const Mesh ab = a & b;
sculpt += ab;
}
}
void build( Mesh &out a, Mesh &out b, const Vec3 &in shift ) {
Builder builder;
const Vec3 pa( 0 );
a = builder.sphere()
.radius( 90 )
.position( pa + shift )
.details( 0.1 )
.build();
const Vec3 pb( 30, 40, 50 );
b = builder.sphere()
.radius( 50 )
.position( pb + shift )
.details( 0.5 )
.build();
}
Запускаем скрипт в Коте (кстати, во Вт, 24/11/15 сделаю, чтобы скрипт можно было пускать при старте 3D-Coat'а) и видим:
Почему такая картинка - понятно, если прочесть код и, может быть, комментарии к нему. Обратите внимание: детализация сфер при добавлении, вычитании и пересечении сохраняется.
Скрипт можно записать более компактно, исключив декларацию `
Mesh ab
`:{
build( a, b, shift );
sculpt += a | b;
}
Это первая заметка с новой архитектурой скриптинга. Синтаксис - красная нить, которой буду придерживаться. Также есть небольшая презентация, в которой видно, каким образом планирую расширять возможности Coat'а. Говорите, если что-то понадобится Вам быстрее. Старый код - тоже работает, но, при появлении подходящей замены, помечается как DEPRECATED.
В ближайшее время добавлю новые примитивы и дополню этот обзор.
Updated 14/12/2015
См. "Примитивы в 3D-Coat: что уже можно".
Комментариев нет:
Отправить комментарий