Выбрать главу

   cameras = ('Front','Right')

   combine.frame(cameras,act_ob.getBoundBox())

   images={}

   for cam in cameras:

      im=Image.Load(render(cam))

      im.reload()

      images[cam]=im

   bpy.data.images.active = im

   Window.RedrawAll()

Затем мы восстанавливаем предыдущую видимость всех объектов на сцене прежде, чем мы создадим новый меш из двух изображений. Мы заканчиваем, делая активный объект невидимым для рендера и заменяя меш объекта дублирования в определенной системе частиц нашим новым мешем:

   for ob in Scene.GetCurrent().objects:

      ob.restrictRender = renderstate[ob.getName()]

   mesh = cardboard(images['Front'],images['Right'])

   act_ob.restrictRender = True

   setmesh('CardboardP',mesh)

Последние строки кода создают камеры, необходимые для рендера билбордов (если эти камеры в данный момент отсутствуют), вызывая функцию createcams() из модуля combine до вызова run():

if __name__ == "__main__":

   combine.createcams()

   run()

Полный код доступен как cardboard.py в файле combine.blend.

Рабочий процесс - использование cardboard.py

Допустим, что у вас есть высокополигональный объект, и что Вы хотели бы преобразовать его в набор билбордов, тогда работа могла бы выглядеть примерно так:

1. Создать объект с именем CardboardP.

2. Назначить систему частиц на этот объект.

3. Создать временный куб.

4. Назначить временный куб дублированным объектом в первой системе частиц  объекта  CarboardP.

5. Выбрать (сделать активным) объект, который будет отрендерен как набор билбордов.

6. Запустить cardboard.py.

7. Выбрать первоначальную камеру и отрендерить сцену.

Конечно, скрипт можно изменить, чтобы пропустить автоматизированную замену меша объектов дублирования, если это нужно. Например, если мы хотели бы использовать объекты dupliverts вместо частиц, мы должны просто сгенерировать cardboard объект и назначить свой меш на объект дублирования. Если мы используем систему частиц, мы, вероятно, не хотим, чтобы все размноженные объекты были ориентированы точно в одном и том же направлении. Мы могли бы, следовательно, сделать их вращение случайным, пример настройки для этого показан на следующем скриншоте:

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

Генерация вопросов CAPTCHA

Во многих ситуациях, как например, блогах, форумах, и онлайн-опросах (можно назвать ещё несколько), операторы вебсайтов хотят избежать автоматизированных почтовых отправлений от спамботов, но не хотят напрягать посетителей-людей регистрацией с аутентификацией. В таких ситуациях, которые стали обычными, посетителю предлагают так называемый вопрос CAPTCHA (http://ru.wikipedia.org/wiki/CAPTCHA). Вопрос CAPTCHA (или просто Captcha) в самой своей простой форме - изображение, которое должно быть трудным для компьютерного распознавания, но простым для расшифровки человеком, обычно это искаженное или смазанное слово или число.

Конечно, никакой из методов не является   абсолютно   надёжным,   и несомненно, вопросы Captcha не лишены недостатков, они не будут устойчивыми при доступных   больших   компьютерных мощностях, но они все еще остаются весьма эффективными. Хотя в настоящее время считается, что способы с простым размытием и окраской — задачи решенные, компьютерам все еще требуется серьёзное время на разделение индивидуальных символов в слове, когда они слегка перекрывают друг друга, в то время как для людей это не проблема.

Учитывая эти аргументы, это может быть отличным применением рендеринга текста в 3D, так как, предположительно, трехмерное представление слов при подходящих условиях освещения (то есть, резкие тени) даже труднее для интерпретации, чем двумерный текст.  Наша задача тогда заключается в разработке сервера, который будет отвечать на запросы, чтобы сделать трехмерное изображение какого-нибудь текста.

Мы разработаем наш сервер как веб-сервер, который будет реагировать на запросы, адресованные ему как URL'ы в форме http:<hostname>:<port>/captcha?text=<sometext>,   и   который возвращает PNG-изображение - 3D-представление этого текста. Таким образом, будет легко внедрить этот сервер в архитектуру, в которой некоторое программное обеспечение, например блог, может легко использовать эту функциональность, просто подключаясь к нашему серверу через HTTP. Пример сгенерированного вопроса показан на иллюстрации: