forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Как реализовать прозрачность текстуры (http://forum.boolean.name/showthread.php?t=4880)

mr.DIMAS 28.10.2007 15:22

Как реализовать прозрачность текстуры
 
Вложений: 2
Немного порывшись по форуму, обнаружил что иногда некоторым начинающим разработчикам очень надо реализовать прозрачность текстуры, т.е под прозрачностью текстуры понимается что какой то определенный цвет в текстуре должен быть невидим. И в этом кратеньком уроке я научю Вас как правильно это делать.
Первым нашим шагом будет создание простого куба на который будет наложена текстура. Первым делом создаем пустой проект. И пишем:

[blitz]
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,2,-5
kub=CreateCube()
kub_texture=LoadTexture("1.bmp")
Repeat
RenderWorld
Flip
Until KeyHit(1)
End
[/blitz]
Сдесь мы создали простой проект в котором на куб наклыдывается текстура. В качестве текстуры можно взять любую картинку на черном фоне). Теперь можно все это дело запустить и посмотреть на результат. Если все правильно то вы увидете куб с текстурой.
Следующий наш шаг это установка прозрачности какому либо цвету( в нашем случае это черный цвет). Затем после SetBuffer BackBuffer() и перед Repeat и перед загрузкой текстуры, прописываем следующее:
[blitz]
TextureFilter "1",4
[/blitz]
Эта команда управляет видом текстуры и еще данная команда содержит достаточно много флагов для установки параметров текстуры. А теперь поподробней рассмотрим ее синтаксис:

[blitz]
TextureFilter сдесь_указывается_имя_текстуры_без_расширения, нужный_флаг
[/blitz]

В первом параметре указывается имя текстуры( без расширения) для которой будет применяться флаг(параметр). А во втором параметре нужный флаг. Вот некоторые флаги:

1 - обычный вид текстуры
2 - прозрачность(альфа-канал)
4 - какой либо цвет становится прозрачным( по умолчанию - черный, в RGB(0,0,0))

Теперь после этого можно запустить и посмотреть на результат: черный цвет будет невидим(прозрачен).

А теперь подведем итог этого маленького урока:

Теперь читатель знает как задавать прозрачность того или иного цвета.
В большинстве игр декалы(дырки от пуль и т.п) создаются именно таким образом.

Вот весь код:
[blitz]
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-5
kub=CreateCube()
TextureFilter"1",4
kub_texture=LoadTexture("1.bmp")
EntityTexture kub,kub_texture
Repeat
CameraClsColor camera,100,100,100
RenderWorld
Flip
Until
KeyHit(1)
End
[/blitz]

НАСЛАЖДАЙТЕСЬ!!!

P.S. Я очень надеюсь что кому-то эта статья поможет. Спасибо за внимание.

P.S.S Вот пример:

moka 29.10.2007 12:57

Re: Как реализовать прозрачность текстуры
 
CameraClsColor camera,100,100,100
Вай, в цикле? Вай! Всё какбы хорошо, но не в цикл её пихай. И имхо, лучше делать прозрачность перебором всех пикселей и изменения их альфы, изая функции Write/Read Pixel

Tadeus 29.10.2007 13:00

Re: Как реализовать прозрачность текстуры
 
Угу! В FAQ даж выкладывали такую функцию ;)

mr.DIMAS 29.10.2007 16:47

Re: Как реализовать прозрачность текстуры
 
Ну извеняюсь, насчет CameraClsColor напарил.... признаю

IGR 29.10.2007 18:16

Re: Как реализовать прозрачность текстуры
 
хорошая робота !! :super:

pipns 29.10.2007 21:25

Re: Как реализовать прозрачность текстуры
 
хороший урок!

Bagration 06.11.2007 14:35

Re: Как реализовать прозрачность текстуры
 
Цитата:

Сообщение от mr.DIMAS
4 - какой либо цвет становится прозрачным( по умолчанию - черный, в RGB(0,0,0))

А как сделать что бы прозрачным был другой цвет а не только черный? Так как черный цвет все таки важен как никак в играх. Как сделать что бы флаг 4 маскировал не черный а цвет скажем 255,0,255? :SOS:

moka 06.11.2007 15:54

Re: Как реализовать прозрачность текстуры
 
Bagration, нужно перебрать все пиксели и поменять им альфу. Смотри Write/Read Pixel.
На форуме уже много раз вылаживали функцию.

ARA 06.11.2007 21:26

Re: Как реализовать прозрачность текстуры
 
можно делать прозрачность ещё в максе с помощью B3d пеплайна.
с помощью .png с прозрачным фоном.

Результат красивее.

dimond 08.11.2007 03:02

Re: Как реализовать прозрачность текстуры
 
установить прозрачность на любой пиксель - юзайте ARGB.
кстати на созданую программно текстуру не действует флаг 4 или 2
т. к. альфаканал пикселей непрозрачен.
перед использованием я обычно закрашиваю всю поверхность текстуры прозрачными пикселями, а потом рисую обычным цветом.
еще, текстуру с альфаканалом можно сделать в фотошопе
только фон должен быть прозрачным. сохраняем в *.png, блиц сам находит, где альфа.

mr.DIMAS 08.11.2007 13:05

Re: Как реализовать прозрачность текстуры
 
Цитата:

еще, текстуру с альфаканалом можно сделать в фотошопе
только фон должен быть прозрачным. сохраняем в *.png, блиц сам находит, где альфа.
этот урок для тех у кого фотожопы нету

dimond 10.11.2007 02:12

Re: Как реализовать прозрачность текстуры
 
Если ты считаешь себя гуру фотошопа, пусть будет так, никто не спорит. А вот другие могут и не знать.
---
Вместо флага 4 можно использовать флаг 2 + альфаканал. Намного лучше смотрится, если это к примеру листва деревьев.


Часовой пояс GMT +4, время: 16:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot