Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.04.2010, 12:55
Аватар для Gwaeron
Gwaeron Gwaeron вне форума
Прохожий
 
Регистрация: 21.04.2010
Сообщения: 4
Репутация: 10
Сообщение Прозрачность объектов

Переделаю уж и первый пост
В общем есть проблема. Рисуются 2 объекта, потом есть потребность в изменении прозрачности этих объектов и возникает проблема, через 2-ой объект 1-ый виден, а наоборот нет.

Все объекты это поверхности второго порядка, либо просто плоскости. Рисуются 4-угольниками с помощью glBegin(GL_QUADS), далее SwapBuffers(DC).
Например:
Код:
procedure PlosX(r1,r2,r3:GLFloat); 
...
Begin
glBegin(GL_QUADS);
...
if i:=-d to d-1 then
begin
  y1:=...;
  y2:=...;

  z1:=...;
  z2:=...;

  x1:=...;
  x2:=...;
  x3:=...;
  x4:=...;

  glVertex3f( x1, y1, z1);
  glVertex3f( x4, y2, z1);
  glVertex3f( x2, y2, z2);
  glVertex3f( x3, y1, z2);

end;
glEnd;
End;

И в итоге получается:
Код:
glColor4f(1,0,0,Blend1);
PlosX(a1,b1,c1);
glColor4f(0,1,0,Blend2);
PlosX(a2,b2,c2);
SwapBuffers(DC);
Ну там перед этим инициализация графики, цвета, глубины и т.д., но она вроде стандартная, но все же:
Код:
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, PanelGraph.Width/PanelGraph.Height, 0.1, 500);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glClearColor(BackC.R, BackC.G, BackC.B, 1.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glShadeModel(GL_SMOOTH);                 
  glClearDepth(1.0);                      
  glEnable(GL_DEPTH_TEST);                 
  glDepthFunc(GL_LESS);		                 
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

  glEnable(GL_COLOR_MATERIAL);
  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @ambient);
  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, @ambient);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_BLEND);
  glEnable(GL_LINE_SMOOTH);
  glEnable(GL_POINT_SMOOTH);
Вот еще две картинки, на первой плоскость, которая дальше видна сквозь ту, которая ближе, а на второй картинке собственно нет, в этом и проблема:


Последний раз редактировалось Gwaeron, 22.04.2010 в 15:34.
Ответить с цитированием
  #2  
Старый 21.04.2010, 14:14
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Как вылечить???
В первый объект колешь укол прозрачности, а во второй укол непрорачности...Че тут непонятного???
Тут еще нужно посмотреть какой объект, и выбирать дозировку по классу объекта...
Делов то)))
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 21.04.2010, 18:49
Аватар для Gwaeron
Gwaeron Gwaeron вне форума
Прохожий
 
Регистрация: 21.04.2010
Сообщения: 4
Репутация: 10
По умолчанию

Вот я так и думал, что так и будет, ответ именно такого типа , что ничего не понятно...
а как-нибудь поподробней, для менее умных можно?...
и если объектов больше чем 2?... там я так понимаю дело в том что когда рисуется второй объект, он уже знает что нарисован первый и поэтому его видно, а когда первый рисуется, то он ничего не знает что будет дальше, там собвственно ни один следующий объект через него не видно

Последний раз редактировалось Gwaeron, 21.04.2010 в 18:51.
Ответить с цитированием
  #4  
Старый 21.04.2010, 18:57
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Каков вопрос таков ответ...
Во первых - какие объекты используешь...
Во вторых - какими методами выводишь объекты...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 21.04.2010, 19:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от NIch
...когда рисуется второй объект, он уже знает что нарисован первый и поэтому его видно, а когда первый рисуется, то он ничего не знает что будет дальше...
Прелесть... Будете продолжать в таком-же духе серьезного ответа не получите. Над этим можно только безлобно подшучивать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 21.04.2010, 20:45
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Поправочка...сообщение не от NIch, а от Gwaeron...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #7  
Старый 21.04.2010, 20:54
Аватар для Gwaeron
Gwaeron Gwaeron вне форума
Прохожий
 
Регистрация: 21.04.2010
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от NIch
Каков вопрос таков ответ...
Во первых - какие объекты используешь...
Во вторых - какими методами выводишь объекты...
Все объекты это поверхности второго порядка, либо просто плоскости. Как рисуются, ну просто 4-угольниками с помощью glBegin(GL_QUADS), далее SwapBuffers(DC).
Например:
Код:
procedure PlosX(r1,r2,r3:GLFloat); 
...
Begin
glBegin(GL_QUADS);
...
if i:=-d to d-1 then
begin
  y1:=...;
  y2:=...;

  z1:=...;
  z2:=...;

  x1:=...;
  x2:=...;
  x3:=...;
  x4:=...;

  glVertex3f( x1, y1, z1);
  glVertex3f( x4, y2, z1);
  glVertex3f( x2, y2, z2);
  glVertex3f( x3, y1, z2);

end;
glEnd;
End;

И в итоге получается:
Код:
glColor4f(1,0,0,Blend1);
PlosX(a1,b1,c1);
glColor4f(0,1,0,Blend2);
PlosX(a2,b2,c2);
SwapBuffers(DC);
Ну там перед этим инициализация графики, цвета, глубины и т.д., но она вроде стандартная, но все же:
Код:
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, PanelGraph.Width/PanelGraph.Height, 0.1, 500);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glClearColor(BackC.R, BackC.G, BackC.B, 1.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glShadeModel(GL_SMOOTH);                 
  glClearDepth(1.0);                      
  glEnable(GL_DEPTH_TEST);                 
  glDepthFunc(GL_LESS);		                 
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

  glEnable(GL_COLOR_MATERIAL);
  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @ambient);
  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, @ambient);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_BLEND);
  glEnable(GL_LINE_SMOOTH);
  glEnable(GL_POINT_SMOOTH);
Вот еще две картинки, на первой плоскость, которая дальше видна сквозь ту, которая ближе, а на второй картинке собственно нет, в этом и проблема:


Последний раз редактировалось Gwaeron, 22.04.2010 в 14:59.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025