forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Освещение спрайта (http://forum.boolean.name/showthread.php?t=19313)

p314 16.07.2014 18:08

Освещение спрайта
 
Делаю освещение спрайта как здесь: http://snakehillgames.com/spritelamp/.Создаю спрайт, накладываю текстуры (обе текстуры диффузная и бамп - файл png c прозрачностью). Использую пример: http://blitzetc.ru/index.php/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9_DOT3_No rmalMapping. Все работает, ...но спрайт становится не прозрачным там где были прозрачные области. Как это исправить?

Gector 16.07.2014 20:37

Ответ: Освещение спрайта
 
Цитата:

Сообщение от p314 (Сообщение 284346)
Делаю освещение спрайта как здесь: http://snakehillgames.com/spritelamp/.Создаю спрайт, накладываю текстуры (обе текстуры диффузная и бамп - файл png c прозрачностью). Использую пример: http://blitzetc.ru/index.php/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9_DOT3_No rmalMapping. Все работает, ...но спрайт становится не прозрачным там где были прозрачные области. Как это исправить?

Пример покажи(скрин или код). Подозреваю что-там что-то не то с флагами или блендом. Но со слов трудно определить.

MadMedic 16.07.2014 21:03

Re: Освещение спрайта
 
Красиво выглядит ...

ABTOMAT 16.07.2014 23:55

Ответ: Освещение спрайта
 
Боюсь, никак. При опеределёных сочетаниях блендов/fx прозрачность не сделать. Это же DirectX 7.

p314 17.07.2014 02:23

Ответ: Освещение спрайта
 
Вложений: 1
Похоже прозрачность теряется если индекс текстуры отличен от нуля.Отсюда я делаю вывод, что мультитекстурирование с прозрачными областями в blitze не работает.

пример на всякий случай прикладываю Вложение 20730

ps. Если все так плохо - куда дальше двигаться в более-менее блитцеподобное(minib3d например) ?

Arton 17.07.2014 04:44

Ответ: Освещение спрайта
 
Во-первый не установлены флаги.

tex1=LoadTexture("stone_diff.png",2)

Во-вторых это бесполезно.


Вариант с альфой:




Вариант с маской можно даже не рассматривать:


tirarex 17.07.2014 15:58

Ответ: Освещение спрайта
 
ЮзатьXors3D Где все это работает !

Кирпи4 17.07.2014 22:01

Ответ: Освещение спрайта
 
Цитата:

Сообщение от p314 (Сообщение 284355)
Похоже прозрачность теряется если индекс текстуры отличен от нуля.Отсюда я делаю вывод, что мультитекстурирование с прозрачными областями в blitze не работает.

пример на всякий случай прикладываю Вложение 20730

ps. Если все так плохо - куда дальше двигаться в более-менее блитцеподобное(minib3d например) ?

Да, минибздун как вариант, если есть желание влезть в гл и поработать напильником

MadMedic 18.07.2014 22:51

Re: Освещение спрайта
 
Вложений: 3
В один проход такой эффект не сделать, потому что dot3 блендит не только информацию о цвете но и о альфе. Вот набросал код в БлицСДК (самого лица под рукой нет). Папка tex в аттаче
Код:


Graphics3D (640, 480, 0, 2)

cam = CreateCamera ()
CameraCLsColor(cam, 255, 66, 66)
CameraProjMode(cam, 2)
CameraZoom(cam, 0.5)
BumpMap=LoadTexture("tex\map-falloff.jpg", 1+16+32)
LightMap=LoadTexture("tex\map-falloff-diff.jpg", 1+16+32)


WallDiff=LoadTexture("tex\wall\wall_diff.jpg")
WallBump=LoadTexture("tex\wall\bump.jpg")
TextureBlend(WallBump, 4)

Wall=CreateCube()
MoveEntity(Wall, 0, 0, 3.2)
EntityFx(Wall, 1)
EntityTexture(Wall, BumpMap, 0, 0)
EntityTexture(Wall, WallBump, 0, 1)
EntityTexture(Wall, WallDiff, 0, 2)

CharDiffAlpha=LoadTexture("tex\char\diff_alpha.png", 1+2)
CharBump=LoadTexture("tex\char\bump.bmp", 1)
TextureBlend(CharBump, 4)
CharAlpha=LoadTexture("tex\char\alpha2.bmp", 1)    ;NOT ALPHA, WILL MULTIPLY

Char=CreateCube()
MoveEntity(Char, 0, 0, 3.1)
EntityFx(Char, 1+32)
EntityTexture(Char, CharDiffAlpha,0, 0)
EntityTexture(Char, LightMap,0, 1)

CharFX=CreateCube()
MoveEntity(CharFX, 0, 0, 3.0)
EntityFx(CharFX, 1)
EntityTexture(CharFX, BumpMap,0, 0)
EntityTexture(CharFX, CharBump,0, 1)
EntityTexture(CharFX, CharAlpha,0, 2)
EntityBlend(CharFX, 3)

Repeat
 
  If KeyDown(57)=0
  PositionTexture(BumpMap, Sin(Millisecs()*0.0015)*0.5, Cos(Millisecs()*0.0025)*0.50)
  PositionTexture(LightMap, Sin(Millisecs()*0.0015)*0.5, Cos(Millisecs()*0.0025)*0.50)
EndIf

 
    RenderWorld ()
    Flip ()
   
Until KeyHit (1)


Черный крыс 22.07.2014 03:32

Ответ: Освещение спрайта
 
Кто-нибудь знает как в OpenGL делается бамп?

Mr_F_ 22.07.2014 03:40

Ответ: Освещение спрайта
 
нормальные люди шейдером делают

Черный крыс 22.07.2014 07:51

Ответ: Освещение спрайта
 
Мне бы сделать методом НЕ нормальных людей.. :)

Mr_F_ 22.07.2014 12:49

Ответ: Освещение спрайта
 
ну раз уж ты взял опенгл, то почему шейдеры не курнуть?
если тебе для 2д спрайтов, то задача ещё проще, чем для 3д, т.к. нормали спрайтов = нормали нормалмап.

clamp(dot(lightDir, normal), 0.0, 1.0) * lightColor


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

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