Blender > BLENDERMETRY (Блендерметрия)
Подмена текстур в BGE
(1/1)
sungreen:
Допустим, что у нас есть несколько изображений и нам нужно эти изображения периодически показывать в BGE. Можно сразу сделать несколько объектов, создать для каждого изображения свою текстуру и двигать эти объекты. Но можно сделать иначе - подменить изображение на лету.
out 34
Делается это так -
Для объекта у которого создан материал и назначена статическая текстуры в коде создается динамическая текстура и указывается новый источник (путь к изображению). Далее по ходу проигрывания Blender Game Engine можно указывать новый путь к изображению, в результате чего будет демонстрироваться новая картинка.
Вот ссылка на Blender API с описанием кода:
http://www.blender.org/documentation/blender_python_api_2_69_1/bge.texture.html?highlight=materialid#bge.texture.materialID
Вот BGE пример на 4 изображения. Во время работы BGE при нажатии на пробел будет происходить смена картинки.
Blend файл с текстурами (архив 1.4м):
http://yadi.sk/d/Ie8AmL2wCm55k
Определения расположения картинки через номер книги (numbook) и номер страницы (numpage). При нажатии на пробел номер страницы увеличиваетс я на 1 (numpage = numpage+1). Если номер страницы больше количества страниц, тогда он приравнивается 1.
--- Код: (BGE) ---def getnextpage():
global numpage
global pagecount
global numbook
numpage = numpage + 1
if numpage>pagecount:
numpage = 1
urlpage = "//books/book"+str(numbook)+"//images//page00"+str(numpage)+".jpg"
print(urlpage)
return urlpage
--- Конец кода ---
Расположение текстур организовано так:
books
book1
images
page001.jpg
page002.jpg
page003.jpg
page004.jpg
Полный текст BGE модуля (он есть в архиве):
--- Код: (BGE) ---import bge
from bge import logic
from bge import texture
def init():
print("init global param")
global numpage
global pagecount
global numbook
numpage = 0
numbook = 1
pagecount = 4
def getnextpage():
global numpage
global pagecount
global numbook
numpage = numpage + 1
if numpage>pagecount:
numpage = 1
urlpage = "//books/book"+str(numbook)+"//images//page00"+str(numpage)+".jpg"
print(urlpage)
return urlpage
if hval(key):
return gdb[key]
return 0
def createTexture(cont):
obj = cont.owner
ID = texture.materialID(obj, 'IMBookPage')
object_texture = texture.Texture(obj, ID)
url = logic.expandPath(getnextpage())
print(url)
new_source = texture.ImageFFmpeg(url)
logic.texture = object_texture
logic.texture.source = new_source
logic.texture.refresh(False)
def removeTexture(cont):
"""Delete the Dynamic Texture, reversing back the final to its original state."""
try:
del logic.texture
except:
pass
--- Конец кода ---
Навигация
Перейти к полной версии