понедельник, 2 ноября 2015 г.

Скрипты 3D-Coat: Начало

Сейчас работаю над скриптами 3D-Coat (появились классы `Angles`, `Mat3`, `Mat4`, `Mesh`, `Quat`, `Vec3`) и решил, в дополнение к документации, создать более наглядные примеры. Начну здесь, посмотрим, что из этого получится...




Вводные моменты для новых читателей
  • 3D-Coat - это инструмент для создания 3D-моделей, в частности органических объектов (см. сайт). Плюс автоматическая ретопология воксельных объектов (см. видео), плюс PBR (видео), плюс UV-развёртка (видео), плюс рельефное текстурирование, плюс экспорт моделей для игровых движков... Да, я люблю эту программу!)
  • Полагаю, что Вы знаете какой-то язык программирования и умеете пользоваться документацией.
  • 3D-Coat понимает AngelScript.
  • Скрипт - это текстовый файл. Удобно создавать и просматривать в Notepad++, с подсветкой синтаксиса "C".
  • Запуск скрипта - из меню 3D-Coat "Скрипты / Запустить скрипт": 
  • Бесплатно скачать 3D-Coat можно отсюда.

и соглашения для себя (чтобы помнить)
  • Краткие, но ёмкие публикации.
  • Простой код.
  • Комментарии в самом коде.
  • Не разжёвывать методы, которые можно найти в документации.
  • Для каждой публикации - картинка / видео / 3D-Sketch. 

Буду придерживаться этих правил. Если возникнуть вопросы - задавайте, ответ будет)

Первый пример - это добавление фигур "на сцену" или, согласно терминологии 3D-Coat, в "Voxel Room" (здесь и далее используются термины из руководства).
// Фигуры, разбросанные по сцене.
void main() {

    // подготавливаем сцену
    SculptRoom  room;
    room.clear().toSurface();

    // инициализируем генератор случ. чисел
    seed( 39 );

    // создаём `N` фигур разного размера, разбрасывая их по сцене
    Builder  builder;
    const int  N = 4;
    const int  A = 10;
    const int  B = 100;
    for ( int i = 0; i < N; ++i ) {
        const int  a = rand( A, B );
        const int  b = rand( A, B );
        const int  c = rand( A, B );
        Mesh  figure = builder.cube()
          .side( Vec3( a, b, c ) )
          .details( 0.1 )
          ();
        const Vec3  translation(
            rand( -B, B ) * 2,
            rand( -B, B ) * 2,
            rand( -B, B ) * 2);
        const Angles  angles(
            rand( 0, 360 ),
            rand( 0, 360 ),
            rand( 0, 360 ) );
        figure.tools().transform()
          .position( translation )
          .rotation( angles )
          ();
        room |= figure;
    } // for i
}

Результат

Правая / левая / средняя кнопки мыши - двигайте / вращайте / масштабируйте.

Комментариев нет: