Michel Anders - Написание скриптов для Blender 2.49

Тут можно читать онлайн Michel Anders - Написание скриптов для Blender 2.49 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Программы. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Написание скриптов для Blender 2.49
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.38/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Michel Anders - Написание скриптов для Blender 2.49 краткое содержание

Написание скриптов для Blender 2.49 - описание и краткое содержание, автор Michel Anders, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка

Написание скриптов для Blender 2.49 - читать онлайн бесплатно полную версию (весь текст целиком)

Написание скриптов для Blender 2.49 - читать книгу онлайн бесплатно, автор Michel Anders
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

for a in e1:

distance = None # расстояние

best = None # лучший

enot = [] # отвергнутые рёбра

Мы повторяем по каждому ребру в первом списке, ссылаясь на это ребро через a. параметр distance содержит расстояние до ближайшего ребра во втором рёберном списке, а best будет ссылкой на это ребро. enot - список, который копит все рёбра из второго списка, которые находятся на большем расстоянии, чем наилучшее.

В конце каждой итерации, enot будет содержать все рёбра из второго списка минус одно - которое мы считаем ближайшим. Затем мы переназначаем enot на второй список, таким образом второй список уменьшается на одно ребро с каждой итерацией. Мы заканчиваем, как только второй список рёбер будет исчерпан:

while len(e2):

b = e2.pop(0)

Текущее ребро из второго списка, которое мы рассматриваем, называется b . Для наших целей, мы определяем расстояние между a и b как сумму расстояний между соответствующими вершинами в a и b . Также мы проверяем, не окажется ли короче сумма расстояний до перевёрнутых вершин b . Если получилась такая ситуация, мы меняем вершины в ребре b . Это может казаться сложным способом действий, но суммированием двух расстояний мы гарантируем, что рёбра, которые сравнительно коллинеарны (параллельны) - привилегированы, тем самым уменьшая число неплоских граней, которые будут созданы. Проверяя, не приведёт ли перевёрнутый второй край к более короткому расстоянию, мы предотвращаем образование искорёженного в виде галстука-бабочки четырёхугольника, как проиллюстрировано на следующем рисунке:

Реализация будет выглядеть похоже на предшествующий рисунок где выделенные - фото 15

Реализация будет выглядеть похоже на предшествующий рисунок, где выделенные вектора - псевдонимы на объект Mathutil.Vector , преобразующий наши кортежи с координатами x, y, и z в соответствующие векторы, которые мы можем вычитать, складывать, и получать их длину.

Сначала мы вычисляем расстояние:

d1 = (vec(verts[a[0]]) - vec(verts[b[0]])).length + \

(vec(verts[a[1]]) – vec(verts[b[1]])).length

Затем мы проверяем с перевёрнутым ребром b, будет ли в результате расстояние короче:

d2 = (vec(verts[a[0]]) - vec(verts[b[1]])).length + \

(vec(verts[a[1]]) - vec(verts[b[0]])).length

if d2

b =(b[1],b[0])

d1 = d2

Если рассчитанное расстояние не самое короткое, мы откладываем ребро для следующей итерации, если оно не первое, с которым мы столкнулись:

if distance == None or d1

if best != None:

enot.append(best)

best = b

distance = d1

else:

enot.append(b)

Список отклонённых рёбер становится новым e2, затем мы заполняем список граней новой парой рёбер, и переходим к новой итерации по первому списку рёбер (a) – доп. пер.

e2 = enot

faces.append((a,best))

Наконец, мы преобразуем наш список граней, состоящий из кортежей двух рёбер, в список кортежей из четырех индексов:

return [(a[0],b[0],b[1],a[1]) for a,b in faces]

Есть много больше в этом скрипте, и мы вновь будем рассматривать creepycrawlies.py в следующей главе, где мы добавим модификаторы, группы вершин и арматуру к нашей модели. Иллюстрация показывает образцы бестиария, которые могут быть созданы скриптом.

Ослепите вашего босса гистограммы в стиле Блендер Чтобы доказать что - фото 16

Ослепите вашего босса - гистограммы в стиле Блендер

Чтобы доказать, что Блендер адаптируется ко многим задачам помимо интерактивного создания 3D-графики, мы покажем Вам, как импортировать внешние данные (электронная таблица в формате CSV) и автоматизировать задачу создания и рендеринга представленной в 3D гистограммы.

Идея в том чтобы запустить Блендер с аргументами указывающими ему запустить - фото 17

Идея в том, чтобы запустить Блендер с аргументами, указывающими ему запустить скрипт, который читает .csv файл, рендерит изображение и сохраняет это изображение по окончании. Чтобы это было возможным, нам нужен способ вызывать Блендер с правильными параметрами. Мы дойдём скоро до этого скрипта, но сначала давайте увидим, как передавать параметры в Блендер, чтобы он запускал скрипт на Питоне:

blender -P /full/path/to/barchart.py

Также возможно вместо этого запустить скрипт из текстового буфера внутри .blend файла по имени этого текстового буфера. Обратите внимание на порядок параметров в этому случае - сначала ставится имя .blend файла:

blender barchart.blend -P barchart.py

В противоположность тому, что описано в документации API, в Питоне мы можем просто получить доступ к аргументам командной строки следующим образом:

import sys

print sys.argv

Последний фрагмент выведет все аргументы, включая имя программы Блендера первым. Наш скрипт должен пропускать любые аргументы, предназначенные для самого Блендера при использовании этого списка. Любые аргументы, предполагаемые только для нашего скрипта, которые не должны быть интерпретированы самим Блендером, должны находится после аргумента конца-опций(end-of-options), двойного минуса (--).

Наконец, мы не хотим, чтобы Блендер появлялся и показывал графический интерфейс пользователя. Вместо этого, мы укажем ему работать в фоне и выйти по завершении. Это делается посредством прохождения опции -b. Задав всё это вместе, командная строка будет выглядеть похожей на это:

blender -b barchart.blend -P barchart.py –- data.csv

Если Блендер работает в фоновом режиме, Вы должныопределить .blend файл, в противном случае Блендер разрушится. Если мы должны определить .blend файл, мы так же хорошо можем использовать внутренний текст для нашего скрипта на Питоне, иначе нам пришлось бы держать два файла одновременно вместо одного.

Скрипт построения гистограммы

Здесь мы покажем важные части кода кусками (полный файл доступен как barchart.blend, который включает barchart.py как вложенный текст). Мы начинаем с создания нового объекта Мира и установки цветов его зенита и горизонта целиком в нейтральный белый (выделенная часть следующего кода):

if __name__ == '__main__':

w=World.New('BarWorld')

w.setHor([1,1,1])

w.setZen([1,1,1])

Затем, мы извлекаем последний аргумент, переданный в Блендер и проверяем является ли расширение файла тем же самым .csv . Реальный промышленный код должен, конечно, иметь более серьёзную проверку на ошибки:

csv = sys.argv[-1]

if csv.endswith('.csv'):

Если у него правильное расширение, мы создаём новую Сцену с именем BarScene и присваиваем её атрибут world к нашему вновь созданному миру (Это было вдохновлено более сложным сценарием jessethemid на Blender Artists http://blenderartists.org/forum/showthread.php?t=79285). Фоновый режим не загружает никакого .blend файла по-умолчанию, так что сцена по-умолчанию не будет содержать никаких объектов. Тем не менее, просто, чтобы убедиться, мы создаем новую пустую сцену со значимым именем, которое будет содержать наши объекты:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Michel Anders читать все книги автора по порядку

Michel Anders - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Написание скриптов для Blender 2.49 отзывы


Отзывы читателей о книге Написание скриптов для Blender 2.49, автор: Michel Anders. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x