Последним шагом нужно обновить дисплейный список Блендера для этого объекта, чтобы наши изменения были отрендерены:
text_ob.setText(text)
text_ob.setExtrudeDepth(0.3)
text_ob.setWidth(1.003)
text_ob.setSpacing(0.8)
text_ob.setExtrudeBevelDepth(0.01)
ob.makeDisplayList()
Как только наш объект Text3d будет на месте, нашей следующей задачей станет отрендерить его изображение в файл. Сначала мы извлекаем контекст рендера из текущей сцены и устанавливаем displayMode в 0, чтобы предотвратить появление дополнительного окна рендера:
context = scn.getRenderingContext()
context.displayMode=0
Затем, мы устанавливаем размер изображения и указываем, что нам нужен формат
context.imageSizeX(160)
context.imageSizeY(120)
context.setImageType(Blender.Scene.Render.PNG)
context.enableRGBAColor()
context.alphaMode=2
Даже если мы рендерим простое неподвижное изображение, мы используем метод
context.currentFrame(1)
context.sFrame=1
context.eFrame=1
context.renderAnim()
self.result=context.getFrameFilename()
return self.result
Последняя часть скрипта определяет функцию
def run(HandlerClass = CaptchaRequestHandler,
ServerClass = BaseHTTPServer.HTTPServer,
protocol="HTTP/1.1"):
port = 8080
server_address = ('', port)
HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass)
httpd.serve_forever()
if __name__ == '__main__':
run()
Полный код доступен как
Заметьте, что этот сервер реагирует на чьи угодно запросы, а это далеко небезопасно. Как минимум он должен быть запущен через межсетевой экран, который ограничивает доступ к нему только для сервера, которому требуются вопросы Captcha. Прежде чем запускать его в любом месте, которое может быть доступно из Интернета, вы должны тщательно подумать о безопасности вашей сети!
Итог
В этой главе мы автоматизировали процесс рендера и узнали, как выполнять множество операций с изображениями без потребности во внешнем графическом редакторе. Мы изучили:
• Автоматизацию процесса рендера
• Создание множества видов для презентации продукта
• Создание билбордов из сложных объектов
• Манипуляцию изображениями, в том числе результатами рендера, используя библиотеку обработки изображений Python Imaging Library (PIL)
• Построение сервера, создающего изображения по-требованию, которые могут быть использованы как вопросы CAPTCHA
В последней главе мы взглянем на некоторые служебные задачи.
9
Расширение вашего инструментария