Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Прозрачность и мультитекстуринг в OpenGL


Автор: rubenhak 15.12.2006, 01:33
рисую 2 текстуры , одна сплошная, а вторая с альфа каналом : 

Код

glActivateTextureARB(GL_TEXTURE_0ARB);
glBindTexture(textureHandle0);
glTexEnvi( ..... , GL_REPLACE);

glActivateTextureARB(GL_TEXTURE_1ARB);
glBindTexture(textureHandle1);
glTexEnvi( ..... , GL_DECAL);

// ..... а потом уже обект.



тут все нормально , поверх одной текстуры налаживается вторая с "альфа дырками" smile

вопрос в следующем, как сделать , чтоб вторая текстура была с параметром прозрачности.
просмотрите пожалуста картинку.

user posted image

Заранее спасибо

Автор: Rickert 15.12.2006, 05:21
rubenhak, Интересный вопрос smile
Пробовал использовать glColo4ub()? С четырьмя параметрами.

Автор: rubenhak 15.12.2006, 15:29
Rickert, а что она делает, и в которой части вызывать эту функцию, и с какими параметрами?  smile 

Автор: rubenhak 18.12.2006, 15:54
люди, ну помогите кто-то , у меня тут кошмар какой-то творится....  smile 

Автор: Rickert 19.12.2006, 14:38
rubenhak, вызывать перед выводом гемотреии. Он указывает как раз яркость слоя.

Автор: rubenhak 23.12.2006, 02:39
Rickert, а тогда у меня разве не оба слоя станут прозрачными?

Автор: Rickert 23.12.2006, 03:19
rubenhak, ну, ты же оключаешь смешивание перед выводом второго? smile
И указывай для него четвёртый параметр = 255

Автор: rubenhak 25.12.2006, 19:59
Rickert, 

тоесть надо так да?

Код

glColor4ub(255,255,255,255);
glActivateTextureARB(GL_TEXTURE_0ARB);
glBindTexture(textureHandle0);
glTexEnvi( ..... , GL_REPLACE);

glColor4ub(255,255,255,128);
glActivateTextureARB(GL_TEXTURE_1ARB);
glBindTexture(textureHandle1);
glTexEnvi( ..... , GL_DECAL);

Автор: Rickert 26.12.2006, 03:22
Примерно. Что получилось?

Автор: rubenhak 26.12.2006, 11:37
смотри, делаю так

Код

glActivateTextureARB(GL_TEXTURE_0ARB);
glBindTexture(textureHandle0);
glTexEnvi( ..... , GL_REPLACE);
glDisableGL_BLEND);


glActivateTextureARB(GL_TEXTURE_1ARB);
glBindTexture(textureHandle1);
glTexEnvi( ..... , GL_DECAL);
glEnable(GL_BLEND);
glBlendFunc( GL_SRC_ALPHA, GL_ONE );
glColor4ub(255,255,255,128);


у меня все слоя становятся прозрачными, и что самое интересное то, что даже когда 
вызываю glColor4ub(255,255,255,255); вместо glColor4ub(255,255,255,128);
прозрачность не исчезает....

Автор: Rickert 26.12.2006, 15:22
rubenhak, правильно так и должно быть. Чтобы прозрачность не распространялась на остальные - надо отключать смешивание перед тем, как выводить непрозрачные слои. Но при этом надо фильтровать будет: сначала выводить все прозрачные слои(объекты), а потом - непрозрачные. Инчае будет глюк.

Я, честно говоря, делал через маску отображения прозрачность ;)

Автор: rubenhak 26.12.2006, 16:23
Rickert, ты наверное о GL_DEPTH_TEST-е да говориш?
мне это помоему не надо, ведь обьект один, просто на нем несколько текстур.

а как смешивание отключить? и почему при значнии alpha = 255 всетаки у меня
получается прозрачная картинка?

Автор: rubenhak 30.12.2006, 17:53
Rickert, у тебя нет никаких идей, или подкинь документацию какую-то....

Автор: Rickert 30.12.2006, 21:20
rubenhak, вот короче исходник одного из уроков с gametutorials.com. Этот сайт раньше бесплатным был, так мой братишка оттуда все уроки тогда слил. Комментариев более чем достаточно чтобы разбраться. Будут вопросы - пиши.
http://rickert.nm.ru/tmp/mask.rar

Автор: rubenhak 31.12.2006, 21:35
Rickert, просмотрю , большое спасибо,


!!! С НОВЫМ ГОДОМ !!!

Автор: Rickert 1.1.2007, 09:27
rubenhak, и тебя с новым годом!
Надо не "просмотреть", а "изучить" smile 

Автор: rubenhak 3.1.2007, 23:18
Rickert, это не то что мне нужно, если ты смотрел пример - 
что и как изменить, чтоб прицел(красный) был с альфа каналом?
а пробовал glColor4f(1,1,1,0.1f); но никакой разницы  smile 

Автор: Rickert 4.1.2007, 07:19
rubenhak, Ты не читал комментарии к коду, который там есть. Там всё рассказывается. Там сначала накладывается маска прозрачности, а потом накладывается текстура.

Автор: rubenhak 5.1.2007, 16:15
Rickert, я читал, но мне не нужна маска прозрачности. у меня все время будет менятся прозрачность.
а маской это сделать невозможно.

Автор: Rickert 5.1.2007, 16:23
rubenhak, на самом деле можно и очень просто smile
Маска - это что? Это текстура со значениями прозрачности.
Берём делаем тестуру всю цветом, например, (127; 127; 127) - вот тебе полупрозрачная маска для твоей текстуры и будет тот эффект, которого ты хочешь добиться.

Автор: rubenhak 9.1.2007, 17:55
Rickert, давай поконкретнее, тоесть этот код будет менять альфу?

Код

glActivateTextureARB(Gl_TEXTURE_0);
glColor(alpha,alpha,alpha);

glActivateTextureARB(Gl_TEXTURE_1);
glBindTexture(Texture1Handle);

// Draw ...

alpha++
if (alpha > 255)
  alpha = 0;

Автор: kseLLor 11.1.2007, 20:05
Цитата(Rickert @ 30.12.2006,  21:20)
rubenhak, вот короче исходник одного из уроков с gametutorials.com. Этот сайт раньше бесплатным был, так мой братишка оттуда все уроки тогда слил. Комментариев более чем достаточно чтобы разбраться. Будут вопросы - пиши.
http://rickert.nm.ru/tmp/mask.rar

А ты не можешь слить эти исходники куда-нибудь, или мне на мейл - [email protected].
Буду очень благодарен.

Автор: Rickert 11.1.2007, 20:56
kseLLor, странный ты какой-то smile Там же прямо в посте указана ссылка на архив - внём исходники smile

Автор: kseLLor 11.1.2007, 22:27
Цитата(Rickert @ 11.1.2007,  20:56)
kseLLor, странный ты какой-то smile Там же прямо в посте указана ссылка на архив - внём исходники smile

По ссылке только 3 примера, а этого маловато будет.

Автор: rubenhak 16.1.2007, 17:35
Rickert, kseLLor,  люди, этот пример вовсе не нужен. 
нужно просто поставить прозрачность на вторую текстуру, и восможность 
все время менять прозрачность. вы когда то Quake 3 играли, вспомните
эффект "пружинки"

Автор: rubenhak 28.1.2007, 21:11
Люди, никак не получается, может поможете чем-то....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)