Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прозрачная Вода [Delphi]


Nic87 ©   (2004-12-10 18:57:00) 

У меня никак не получается сделать в ландшафте воду. 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 кто-нибудь!


ViK   (2004-12-11 19:48:00) [1]

Попробуй использовать режим
glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA)
может быть поможет


TButton   (2004-12-11 19:06:00) [2]


> Сколько уже с 3д работаю, впервые слышу про "двусторонние"
> полигоны.
>
> Из личного опыта знаю, что если полигон виден с двух сторон,
> значит это два склеенных полигона. Вообще у полигона есть
> нормаль. Куда она направлена с той стороны и видно его.

зато есть двухсторонние материалы!
вотЪ!
=)


Nic87   (2004-12-11 18:39:00) [3]


> Bryke

А без этого никак нельзя? Если нет, тогда, сделаю именно так :)
Спасибо.


Bryke   (2004-12-11 17:51:00) [4]

Ты текстуру на водичку нанеси.


Nic87   (2004-12-11 14:41:00) [5]

Help!


Nic87   (2004-12-11 12:40:00) [6]

Всем спасибо огромное! У меня получилось! Но есть ещё один маленький вопросик. Итак, полученный код:
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;
Почему-то вода над ландшафтом не синяя, а того тона, который имеет ландшафт. Например, если ландшафт текстурирован под травку (зелёный), то вода получается едко-жёлтой, а не голубой. В чём может быть проблема?


miek   (2004-12-11 10:29:00) [7]

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

Видимо, ты используешь только GL_FRONT_FACE? Обычно так и делают, потому что двусторонние полигоны действительно редко нужны.

>Реально можно побаловаться с полигонами в 3DMax. И все будет ясно.
"Если вам все ясно, значит, вам не все говорят" (С) Поговорка.


ViK   (2004-12-11 10:17:00) [8]

В ОпенГЛ по умолчанию отображается только одна сторона примитива (лицевая). При взгляде на лицевую сторону точки примитива должны описываться против часовой стрелки (описание по или против часовой стрелки можно менять командой glFrontFace() с параметрами GL_CW и GL_CCW).
Чтобы примитив был двусторонний надо отключить отсечение обратной стороны, далается это с помощью команды glDisable(GL_CULL_FACE).
Но лучше рисовать два примитива: чтобы первый был виден сверху, а второй - снизу.


IRIX   (2004-12-11 10:07:00) [9]

>> А можно конкретный кусочек из мануала, где про это сказано, или хотя бы ссылку на мануал по полигонам? А то я прям в замешательстве. Сколько уже с 3д работаю, впервые слышу про "двусторонние" полигоны.

:_)
да ты наверное целых 3 дня уже с 3D "работаешь" :)))))

glDisable(GL_CULL_FACE);
рисуем воду
glEnable(GL_CULL_FACE);


Nic87   (2004-12-11 07:32:00) [10]

Вот, я менял направление нормали и что-то не получается. Сегодня ещё попробую.


Домовенок   (2004-12-10 23:30:00) [11]

>miek (10.12.04 21:58) [7]

А можно конкретный кусочек из мануала, где про это сказано, или хотя бы ссылку на мануал по полигонам? А то я прям в замешательстве. Сколько уже с 3д работаю, впервые слышу про "двусторонние" полигоны.

Из личного опыта знаю, что если полигон виден с двух сторон, значит это два склеенных полигона. Вообще у полигона есть нормаль. Куда она направлена с той стороны и видно его.

Реально можно побаловаться с полигонами в 3DMax. И все будет ясно.

>Nic87 (10.12.04 19:19) [4]

Так же точно как и первый, только нормалью в обратную сторону.


miek   (2004-12-10 21:58:00) [12]

>Для общего развития: полигон не может быть видным с двух строн. Для этого нужен еще один полигон.

Может. RTFM.

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


Nic87   (2004-12-10 20:28:00) [13]

Помогите же кто-нибудь! Проект горит!


Nic87   (2004-12-10 19:23:00) [14]


> Bryke

Режим отсечения чего? Я новичок в деле графики :(


Nic87   (2004-12-10 19:19:00) [15]

Хочется без текстур. Как можно нарисовать второй полигон?


Bryke   (2004-12-10 19:18:00) [16]

:))))))
Выруби режим отсечения.


Домовенок   (2004-12-10 19:16:00) [17]

Для общего развития: полигон не может быть видным с двух строн. Для этого нужен еще один полигон.

А не пробывал сделать *.tga текстуру с фактурой воды, прозрачностью в 50%?


Nic87   (2004-12-10 19:01:00) [18]

Забыл уточнить. Пишу на OpenGL API


Наверх

Титульная страница Поиск, карта сайта Написать письмо