Форум: "Игры";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизАльфаканал Найти похожие ветки
← →
DevilDevil © (2006-11-08 19:30) [0]Хочу вывести альфатекстуру в 2D режиме (типа Transparent). Причём сама она тоже должна быть прозрачной [прозрачность регулируется мной]. Получается не очень: Сама текстура становится светлее, Transparent-эффект работает несовсем, ... :
glPushAttrib(GL_ALL_ATTRIB_BITS);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glPushMatrix;
glLoadIdentity;
gluOrtho2D(0,WindowWidth,WindowHeight,0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, MyTexture);
glcolor4ub(255, 255, 255, 128);// 128 - коэфициент прозрачности
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(X, Y);
glTexCoord2f(1, 1);
glVertex2f(X+TexWidth, Y);
glTexCoord2f(1, 0);
glVertex2f(X+TexWidth, Y+TexHeight);
glTexCoord2f(0, 0);
glVertex2f(X, Y+TexHeight);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix;
glPopAttrib;
glMatrixMode(GL_MODELVIEW);
← →
Rial © (2006-11-08 21:12) [1]> [0] DevilDevil © (08.11.06 19:30)
1.
Если у тебя прозрачная текстура, что же сквозь нее,
такую вот прозрачную всю из себя,просвечивает то ?
Значит, еслть какие то объекты за этой текстурой, так ?
А раз они за ней, значит коордитана Z у них другая.
Т.е. режим уже не 2D. Получаем противоречие, ч.т.д.
2.
Что мешает все рисовать в 3D, просто без перспективы,
будут тебе тогда объекты "спереди" и "сзади", и все будет хорошо с
прозрачностью.
3.
А ты порядок отрисовки учитываешь ?
4.
Как что то может работать не совсем ? Оно уж или работает, или нет.
5.
У тебя большую часть кода нет необходимости
выполнять при каждой перерисовке, вытащи его в обработчик
сообщения изменения размеров окна.
6.
glBindTexture(GL_TEXTURE_2D, 0); - это как понимать ?
С какой целью ты это делаешь ?
7.
GL_QUADS работает жутко медленно. Лучше рисуй треугольниками,
выиграешь в скорости как минимум в 2 раза.
8.
glBindTexture(GL_TEXTURE_2D, 0); - данная строка явно не на месте.
9.
glcolor4ub(255, 255, 255, 128); - режет глаз.
Лучше синглы или даблы ИМХО.
10.
glPushAttrib(GL_ALL_ATTRIB_BITS); - тоже не вполне понимаю, зачем
тут эта процедурка нужна. выкинь ее вообще.
11.
glEnd(); - это, я так понимаю, из C++ исходника украдено ?
Пока больше вопросов не имею :)
← →
DevilDevil © (2006-11-09 12:08) [2]> Rial © (08.11.06 21:12) [1]
> 1-11
:)
Краткое предисловие: у меня есть квадратная текстура "баба с пистолетом", нарисована на синем фоне. Соответственно синий фон не должен быть виден. В местах, где в битмапе цвет синий,альфаканал := 0 иначе альфаканал := 255;
1.)
сзади текстуры ничего нет, просвечивает синий цвет по периметру бабы.
2.)
надо мне уметь в 2D режиме работать
3.)
имхо это непричём
4.)
работает не так, как надо
5.)
всё это понятно конечно, но...
6.)
на всякий пожарный
7.)
где про это написано? интересно почитать
8.) см 6.)
9.)
ну нет особой разницы
10.)glPushAttrib(GL_ALL_ATTRIB_BITS);
// -> мало ли, какие режимы ещё отключу
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
...
glPopAttrib;
11.) нет
ЗЫ
Первое, о чём можно подумать, это то, что текстура[а точнее альфаканал] неправильно создана. Я проверял, текстура, полученная таким образом в DGLE отображается корректно:Begin2D;
DrawTexture2D(MyTexture,X,Y,TexWidth,TexHeight,0,128,$FFFFFF,false);
End2D;
Ну и конечно хочется сказать: "какой же ты программист, если не можешь в готовых исходниках посмотреть реализацию..." . Вобщем, сводится отрисовка к одной суперуниверсальной процедуре с туевой хучей параметров, сбивающих с толку... Именно поэтому и решил я пойти самым простым способом: написать самому...
Надеюсь, подскажите, в чём тут загвоздка...
← →
evgepet © (2006-11-09 12:58) [3]Возможно светлеет она от цвета квада (255,255,255,...)
Попробуй ещё установить
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
У меня тож такая трабла была и решилась очень просто, не помню как :)
← →
DevilDevil © (2006-11-09 13:41) [4]> glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
ещё хуже стало: транспарента вообще нет, синий цвет заменился на белый
> Возможно светлеет она от цвета квада (255,255,255,...)
в DGLE задаётся белый цвет:$FFFFFF
← →
Rial © (2006-11-09 14:58) [5]> [2] DevilDevil © (09.11.06 12:08)
> Краткое предисловие: у меня есть квадратная текстура "баба
> с пистолетом", нарисована на синем фоне.
Отлично. Теперь я понял, что ты хотел сделать.
1.
Если в самой текстуре значения альфа принимают только
значиние 0 или 255, то при отрисовке прямоугольника
цвет надо задавать полностью белый.
Все дело в том, что цвет пикчелей текстуры - это одно,
а цвет полигонов - это другое. Они у тебя накладываются.
Получается примерно то же, как если бы у тебя
вмето 255 в текстуре были бы только 127.
Поэтому пиши
glColor4ub(255, 255, 255, 255);
2.
При загрузке текстуры следовало бы фильстровать
цвета, близкие к синему. Т.к. если грузится из
файл, использующего сжатие с потерями, то
эффект может быть несколько неожиданным.
Делается это либо попикселльно, что замедляет загрузку,
но несколько ускоряет использование, либо
вот так:
glAlphaFunc(GL_LEQUAL, MinAlpha);
glAlphaFunc(GL_GEQUAL, MaxAlpha);
Т.е, можно написать
glAlphaFunc(GL_LEQUAL, 0.1);
и все очень прозрачные части станут совсем прозрачными :)
3.
GL_QUADS медленне. не знаю, где написано.
Но там рисуентся 4 треугольника, когда как очевино,
что для отрисовки прямоугольника вполне
достаточно и двух.
Попробуй, отпишись о результатах...
← →
DevilDevil © (2006-11-09 15:16) [6]
glColor4ub(255, 255, 255, 255);
glAlphaFunc(GL_GEQUAL, 0.9);
<-- работет конечно лучше, но не совсем хорошо. Я конечно понимаю, альфасоставляющие текстуры и прямоугольника - разные вещи..., но добиться нужно именно этого...
← →
DevilDevil © (2006-11-09 15:50) [7]прискорбно...
Оказалось, у меня неправильно преобразуется само изображение, после непрвильно отслеживается альфаканал...
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c