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

Онлайн 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 »
Для Кота

 


Яметрика

* По форуму

* Рекламный блок

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

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 100
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

Скачано: 112
Автор: Dilifa12