-
> Большой кайлём.
Не слушай его! А то он тебя научит, да!! )))
-
> main ©
Разжевываю: При ЛЮБОЙ сортировке Depth Test идет первым. Тоесть если тест глубины НЕ сработал, то пиксель не рисуется. Теперь имеем два квада звезд. Первая находится ближе к камере и частично перекрывает вторую. Первая нарисовалась, часть второй НЕ ПРОЙДЕТ тест глубины, адже там, где у первой звезды пиксели прозрачны. Тоесть часть второй звезды ВООБЩЕ НЕ НАРИСУЕТСЯ, ПРИ ЛЮБОМ СМЕШИВАНИИ.
-
> @!!ex © (12.10.09 13:25) [21]
Вопрос: Ты ссылку что я привел, читал?
-
> [22] main © (12.10.09 13:27)
Читал. Ключевой момент статьи: при отрисовке прозрачных объектов, выключать для них запись в буффер глубины, но оставлять включенным тест на глубину (Z-test). О чем я тебе и талдычу уже 4 поста. Внимательно прочитай нашу с тобой переписку.
-
Разжевываю:
- сначала рисуем ВСЕ непрзорачные объекты; - при отрисовке прозрачных объектов, выключаем для них запись в буффер глубины, но оставляем включенным тест на глубину (Z-test).
Этот метод всегда работает правильно, если тип блендинга (прозрачности) задан как суммирование (GL_ONE, GL_ONE) так как от перемены мест слагаемых, сумма не меняется.
При использовании других типов прозрачности, будут артефакты.
!! и все это без сортировки!!
-
> [24] main © (12.10.09 13:33)
Мля.... Ключевой момент "ВЫКЛЮЧЕННЫЙ DEPTH TEST". О чем я и CryptoGen и говорили. А ты о каком-то смешивании пишешь, которое никак проблему не решает. Ты ехешку смотрел??? Там близко нет проблемы смешивания. Там проблема буффера глубины.
-
> @!!ex © (12.10.09 13:36) [25]
А я вам толдычу о том: 1) Для звезд лучше подойдет суммирующее смешивание, чем обычное. Потому-что для звезд такое смешивание красивее.)) 2) И плюс ко всему, именно такой тип смешивание, решает проблему сортировки.
-
> Ты ехешку смотрел???
Сейчас вот неполенился посмотрел. Если совсем просто, так там добавить нужно то всего пару строчек:
Procedure TForm1.Draw; var n:integer; begin glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glLoadIdentity; glTranslatef(0, 0, -35);//camera //Stars glColor3F(1,1,1); glEnable(GL_POINT_SPRITE_ARB);
glEnable( GL_BLEND ); glBlendFunc( GL_ONE , GL_ONE ); glDepthMask( False );
glbegin(GL_POINTS); for n:=1 to MaxStars do glVertex3f(Stars[n].pos.x,Stars[n].pos.y,Stars[n].pos.z); glEnd; glDisable(GL_POINT_SPRITE_ARB); SwapBuffers(DC); end;
-
Вот выделил жирным шрифтом:
Procedure TForm1.Draw; var n:integer; begin glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glLoadIdentity; glTranslatef(0, 0, -35);//camera //Stars glColor3F(1,1,1); glEnable(GL_POINT_SPRITE_ARB);
glEnable( GL_BLEND ); glBlendFunc( GL_ONE , GL_ONE ); glDepthMask( False );
glbegin(GL_POINTS); for n:=1 to MaxStars do glVertex3f(Stars[n].pos.x,Stars[n].pos.y,Stars[n].pos.z); glEnd; glDisable(GL_POINT_SPRITE_ARB); SwapBuffers(DC); end;
-
Ну как, красиво? )) Артефакты есть? Нет!
-
Ну вы еще подеритесь :)) Вот мои первые шаги в опенгл www.roganovg.narod.ru/stars.zip
-
кстати у меня сложилось впечатление, что вы говорите об одном и том же :)))
-
Я говорю о том, что не надо решать проблему которой на самом деле нет. Зачем думать как сортировать, если в данном конкретном примере можно не сортировать.
Алекс, ты уже выпил яду? ))
-
> [32] main © (12.10.09 14:52)
Даже не надейся. :) Я лишь на протяжении 6 постов говорил о том, что смешивание НЕ будет работать с включенным DepthTest'ом. Что ты и продемонстрировал в [28] Убери строку: glDepthMask( False );
и получишь баги. Если что, эта строка отключает запись в глубину. Что в данном случае равносильно полномю отключению теста глубины.
|