четверг, 8 января 2009 г.

Panda3D: Работа с текстом и изображениями

Panda3D содержит поддержку для простого создания и отображения текста и изображений в трехмерном пространстве.

Описание начну с работы с текстом.  По умолчанию в установочном пакете Panda3D представлена библиотека "Freetype", которая позволяет установить любой шрифт для отображения в рендер-окне. Данный код позволяет выполнить данную задачу:

font = loader.loadFont('arial.ttf')

Как не трудно догадаться для параметра "font", которым в данном случае выступает отображаемый текст задается шрифт "arial" с помощью функции "loadfont" и класса "loader". Также произвольно можно задать и путь к файлу шрифта. (ВАЖНО: путь указывать при синтаксисе "C:/font").

Также возможно создать шрифт для Panda3D с помощью утилиты "egg-mkfont", поставляющейся с пакетом движка. После конвертации будет создан .egg файл, который будет является уже текстурным файлом, но  используемый в качестве шрифта. Для использования утилиты и конвертации шрифта в командной строке необходимо прописать:

egg-mkfont -o arial.egg arial.ttf

(название утилиты, операция, имя экспортируемого файла, имя импортируемого файла). Для написания скрипта будет использован аналогичный код:

font = loader.loadFont('arial.egg')

Основные преимущества использования конвертированных шрифтов:

1. Конвертированный шрифт (.egg) может использоваться в версии Panda3D, которая не поддерживает 'freetype'

2. Можно применять некоторые базовые эффекты к сгенерированной текстуре используя 2d редактор (photoshop и др.)

Для отображения текста в рендер-окне мы будем использовать класс "OnscreenText". Самый простой код скрипта с использованием данного класса можно представить так:

from direct.gui.OnscreenText import OnscreenText

textObject = OnscreenText(text = 'my text string', pos = (-0.5, 0.02), scale = 0.07)

run()

Думаю здесь все понятно. Сначала создаем поддержку класса при импортировании, затем для объекта "textObject" задаем параметры отображения (отображаемый текст, позиция относительно координат x,y, размер шрифта). Кроме данных параметров существует еще ряд плезных значений, например:

"fg" - генерирует цвет текста. Цвет определяют 4 параметра задания цвета (красный, зеленый, голубой, номер комбинации).
"bg" - цвет заднего фона текста. Также задается 4мя параметрами.
"shadow" - создает тень за текстом с цветом, цвет которого задается 4мя параметрами. 
"frame" - создание рамки вокруг текста с заданным цветом и порядковым номером. 

Как пример для всего вышеприведенного используем наглядный код:

#importing part
import direct.directbase.DirectStart
from direct.gui.DirectGui import *



#text
text = OnscreenText(text = 'Demo Render', pos = (-1.15, 0.9), scale = 0.065, fg=(1,1,0,1), shadow=(1,1,0,1), frame=(4,4,4,1))



#Programm run
run()

Результат:

Работа с классом "OnscreenImage" аналогична. Единственное отличие что вместо текста отображается изображение. 

Единственное что хотел бы здесь добавить. Создание прозрачного изображения:

В сегмент импорта добавим строку:

from pandac.PandaModules import TransparencyAttrib


Код скрипта прозрачного изображения будет выглядеть так:

self.myImage=OnscreenImage(image = 'panda.png', pos = (0, 0, 0))
self.myImage.setTransparency(TransparencyAttrib.MAlpha)

Особых пояснений, думаю, делать не стоит :) Кроме одного: так как движок не поддерживает формат файлов ".gif" для прозрачных изображений следует использовать файлы ".png" и ".tga".

С уважением, Dredd

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

Отправить комментарий