Текущий архив: 2005.03.13;
Скачать: CL | DM;
Вниз
Прозрачная Вода Найти похожие ветки
← →
Nic87 © (2004-12-10 18:57) [0]У меня никак не получается сделать в ландшафте воду. Help me кто-нибудь плиз! Я пытаюсь сделать просто прозрачную плоскость синего цвета - глючит жутко. Хто нибудь помогите, горю!
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Алгоритм расчета прозрачности
glEnable(GL_BLEND); // Включаем прозрачность
glDisable(GL_DEPTH_TEST); // Выключаем буфер глубины
glColor4f(1.0,1.0,1.0,0.5);
дальше рисую полигон. ПОлучается такая проблема, что этот полигон виден только с одной стороны. Вектор нормали пробовал менять :( Help кто-нибудь!
← →
Nic87 © (2004-12-10 19:01) [1]Забыл уточнить. Пишу на OpenGL API
← →
Домовенок (2004-12-10 19:16) [2]Для общего развития: полигон не может быть видным с двух строн. Для этого нужен еще один полигон.
А не пробывал сделать *.tga текстуру с фактурой воды, прозрачностью в 50%?
← →
Bryke (2004-12-10 19:18) [3]:))))))
Выруби режим отсечения.
← →
Nic87 © (2004-12-10 19:19) [4]Хочется без текстур. Как можно нарисовать второй полигон?
← →
Nic87 © (2004-12-10 19:23) [5]
> Bryke
Режим отсечения чего? Я новичок в деле графики :(
← →
Nic87 © (2004-12-10 20:28) [6]Помогите же кто-нибудь! Проект горит!
← →
miek © (2004-12-10 21:58) [7]>Для общего развития: полигон не может быть видным с двух строн. Для этого нужен еще один полигон.
Может. RTFM.
Воду я на GLScene делал как полупрозрачную плоскость с анимированной бесшовной текстурой (можно просто склеить несколько кадров в один и переключать их координаты). Текстурку можно из Quake взять.
← →
Домовенок (2004-12-10 23:30) [8]>miek (10.12.04 21:58) [7]
А можно конкретный кусочек из мануала, где про это сказано, или хотя бы ссылку на мануал по полигонам? А то я прям в замешательстве. Сколько уже с 3д работаю, впервые слышу про "двусторонние" полигоны.
Из личного опыта знаю, что если полигон виден с двух сторон, значит это два склеенных полигона. Вообще у полигона есть нормаль. Куда она направлена с той стороны и видно его.
Реально можно побаловаться с полигонами в 3DMax. И все будет ясно.
>Nic87 (10.12.04 19:19) [4]
Так же точно как и первый, только нормалью в обратную сторону.
← →
Nic87 © (2004-12-11 07:32) [9]Вот, я менял направление нормали и что-то не получается. Сегодня ещё попробую.
← →
IRIX (2004-12-11 10:07) [10]>> А можно конкретный кусочек из мануала, где про это сказано, или хотя бы ссылку на мануал по полигонам? А то я прям в замешательстве. Сколько уже с 3д работаю, впервые слышу про "двусторонние" полигоны.
:_)
да ты наверное целых 3 дня уже с 3D "работаешь" :)))))
glDisable(GL_CULL_FACE);
рисуем воду
glEnable(GL_CULL_FACE);
← →
ViK © (2004-12-11 10:17) [11]В ОпенГЛ по умолчанию отображается только одна сторона примитива (лицевая). При взгляде на лицевую сторону точки примитива должны описываться против часовой стрелки (описание по или против часовой стрелки можно менять командой glFrontFace() с параметрами GL_CW и GL_CCW).
Чтобы примитив был двусторонний надо отключить отсечение обратной стороны, далается это с помощью команды glDisable(GL_CULL_FACE).
Но лучше рисовать два примитива: чтобы первый был виден сверху, а второй - снизу.
← →
miek © (2004-12-11 10:29) [12]Почитай хелп к GL_POLYGON_MODE. По умолчанию рисуется только поверхность, повернутая нормалью к камере. Но можно рисовать только обратную строну, или обе сразу (какая видна, такая и рисуется - это и есть двусторонний полигон).
Видимо, ты используешь только GL_FRONT_FACE? Обычно так и делают, потому что двусторонние полигоны действительно редко нужны.
>Реально можно побаловаться с полигонами в 3DMax. И все будет ясно.
"Если вам все ясно, значит, вам не все говорят" (С) Поговорка.
← →
Nic87 © (2004-12-11 12:40) [13]Всем спасибо огромное! У меня получилось! Но есть ещё один маленький вопросик. Итак, полученный код:
procedure DW(a, b: Integer);
begin
glDisable(GL_CULL_FACE);
glBlendFunc(GL_SRC_ALPHA,GL_ONE); //
glEnable(GL_BLEND); //
glColor4f(0.0,0.0,1.0,0.5);
glBegin(GL_QUADS);
glNormal3f(0, -1, 0);
glVertex3f(a/2, 3, b/2);
glVertex3f(-a/2, 3, b/2);
glVertex3f(-a/2, 3, -b/2);
glVertex3f(a/2, 3,-b/2);
glEnd;
glDisable(GL_Blend);
glEnable(GL_CULL_FACE);
end;
Почему-то вода над ландшафтом не синяя, а того тона, который имеет ландшафт. Например, если ландшафт текстурирован под травку (зелёный), то вода получается едко-жёлтой, а не голубой. В чём может быть проблема?
← →
Nic87 © (2004-12-11 14:41) [14]Help!
← →
Bryke (2004-12-11 17:51) [15]Ты текстуру на водичку нанеси.
← →
Nic87 © (2004-12-11 18:39) [16]
> Bryke
А без этого никак нельзя? Если нет, тогда, сделаю именно так :)
Спасибо.
← →
TButton © (2004-12-11 19:06) [17]
> Сколько уже с 3д работаю, впервые слышу про "двусторонние"
> полигоны.
>
> Из личного опыта знаю, что если полигон виден с двух сторон,
> значит это два склеенных полигона. Вообще у полигона есть
> нормаль. Куда она направлена с той стороны и видно его.
зато есть двухсторонние материалы!
вотЪ!
=)
← →
ViK © (2004-12-11 19:48) [18]Попробуй использовать режим
glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA)
может быть поможет
Страницы: 1 вся ветка
Текущий архив: 2005.03.13;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.024 c