В связи с сильными дождями появилась свободная минутка и я решил проверить одну мысль: что если генерировать Stencil - маску "на лету"? Таки получилось. Что это дает?
А получается вот что. Меш для "вершинного" ландшафта всё время находится в поле зрения камеры, целиком и полностью, никуда не "уползая", изменяются только Z - координаты вершин, в зависимости от положения камеры относительно глобальной системы координат. Точнее конечно, положения ландшафта, но это не особо важные детали. Благодаря этому, можно а) смещать изображение текстурной маски с помощью скрипта UV-скроллинга или б) можно генерировать изображение текстурной маски исходя из, например, данных о высоте вершины, или прямо читая данные цвета из словаря.
Текст скрипта:
import bge
import random as r
cont = bge.logic.getCurrentController()
own = cont.owner
sens = cont.sensors['Always']
sensKey = cont.sensors['keySpace']
imageSize = 32
if sens.positive and 'text' not in own:
own['text'] = bge.texture.Texture(own, 0, 1)
own['text'].source = bge.texture.ImageBuff()
own['text'].source.load(bytearray((int(r.random() * 255), int(r.random() * 255), int(r.random() * 255))) * (imageSize * imageSize), imageSize, imageSize)
own['text'].refresh(False)
if sensKey.positive:
own['text'].source = bge.texture.ImageBuff()
tempBrush = []
for x in range(0, imageSize * imageSize):
R = int(r.random() * 255)
tempBrush.append(R)
tempBrush.append(R)
tempBrush.append(R)
b = bytearray((tempBrush))
own['text'].source.load(b, imageSize, imageSize)
own['text'].refresh(False)
А получается вот что. Меш для "вершинного" ландшафта всё время находится в поле зрения камеры, целиком и полностью, никуда не "уползая", изменяются только Z - координаты вершин, в зависимости от положения камеры относительно глобальной системы координат. Точнее конечно, положения ландшафта, но это не особо важные детали. Благодаря этому, можно а) смещать изображение текстурной маски с помощью скрипта UV-скроллинга или б) можно генерировать изображение текстурной маски исходя из, например, данных о высоте вершины, или прямо читая данные цвета из словаря.
Текст скрипта:
import bge
import random as r
cont = bge.logic.getCurrentController()
own = cont.owner
sens = cont.sensors['Always']
sensKey = cont.sensors['keySpace']
imageSize = 32
if sens.positive and 'text' not in own:
own['text'] = bge.texture.Texture(own, 0, 1)
own['text'].source = bge.texture.ImageBuff()
own['text'].source.load(bytearray((int(r.random() * 255), int(r.random() * 255), int(r.random() * 255))) * (imageSize * imageSize), imageSize, imageSize)
own['text'].refresh(False)
if sensKey.positive:
own['text'].source = bge.texture.ImageBuff()
tempBrush = []
for x in range(0, imageSize * imageSize):
R = int(r.random() * 255)
tempBrush.append(R)
tempBrush.append(R)
tempBrush.append(R)
b = bytearray((tempBrush))
own['text'].source.load(b, imageSize, imageSize)
own['text'].refresh(False)
Комментариев нет:
Отправить комментарий