Автор Тема: Подмена текстур в BGE  (Прочитано 2009 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Подмена текстур в BGE
« : 16 Ноября 2013, 08:03:19 »
Допустим, что у нас есть несколько изображений и нам нужно эти изображения периодически показывать в 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
« Последнее редактирование: 16 Ноября 2013, 09:06:28 от sungreen »
Для Кота

 

* По форуму

* Последние вложения

Screw.jpg
Скачано: 4
Автор: Dmi3ryd
Cylinder_animation.gif
Скачано: 5
Автор: Dmi3ryd
seit1.jpg
Скачано: 9
Автор: sandman
nif_op_not_defined.png
Скачано: 4
Автор: corbieeye
Слежение.jpg
Скачано: 14
Автор: Barabashka