Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Солнце на OpenGL   Найти похожие ветки 

 
Pa5ha   (2006-04-30 00:15) [0]

Как сделать солнце, чтоб если на него смотришь, то весь экран заливается светом? А то вот просто билборд не смотрится.

Причем в играх сделано не с помощью гаммаконтроля, текстуры, а как-то по-другому. А то вот не знаю.


 
XProger ©   (2006-04-30 00:19) [1]

Рисуем прозрачный белый полигон на весь экран. С блендингом режима - сложение.


 
Pa5ha   (2006-04-30 01:03) [2]

Не, не так. Я хочу, чтоб из центра свет расходился. Как быть? Т.е. как в одной гаме, где мне нравится солнце. Т.е. када в центре ничо не видно по краям ещё просвечивает. К тому же там как-бы лучи солнечного света.


 
XProger ©   (2006-04-30 01:10) [3]

Солнце жёлто-белое? От него идут лучи (биллборд). При аддитивном наложении будет так как ты сказал.


 
Pa5ha   (2006-04-30 01:18) [4]

но лучи блин, при 1280х1024 просто идеальные. Градиент аднака. А если текстуру 128х128 (а в игре именно такая) растянуть на весь экран, то пиксели, ессно будут видны. Да и там не текстура юзается. Текстура тока солнце обозначает. Это я её сдуру на весь экран растянул.


 
Думкин ©   (2006-04-30 05:01) [5]

> Pa5ha   (30.04.06 01:18) [4]

Ну укажи гамму, чтобы и другие заценили. А то мне вот в одной игре кот понравился, но все что предложат - не то.
А лучи - их видно только в атмосфере и на частицах. Как и луч лазера.


 
antonn ©   (2006-04-30 06:29) [6]

блум какой-то, видимо... только прогрессирующий:)


 
Pa5ha   (2006-04-30 19:59) [7]

Думкин, RCFsim601 :)

ладно, думаю дальше. А вообще, есть примеры, как солнце можно сделать? В коде?


 
Fosgen   (2006-05-04 10:04) [8]

Млин, ну есть же готовое решение - называется Lens FX - имитация бликов (на стекле, оптике, в глазу) от источников света.
Принцип работы:
1. Если источник света не загораживается никаким предметом - рисуется билборд на "поверхности" экрана - т.е. с нулевой глубиной размещения. Если загораживается - рисуется только один маленький билборд.
2. Координата билборда совпадает с проецированными на плоскость экрана координатами источника света. Если источник света загорожен от камеры -  координаты билборда, соответствуют пространственным координатам источника света.
3. могут быть вторичные билборды - с радиально (относительно центра экрана и проходя от источника света) размещенными бликами разной формы\размера\оттенка... Они только в случае видимого источника света.
4. Текстуры для билбордов могут быть как заранее заготовлены, так и расчитываемы в ран-тайме.

Пример резализации - в последних версиях GLScene - есть готовый эффект LensFX с расчетом текстур в ран-тайме.
http://www.delphi3d.net/download/lensflare.zip - давно качал, не знаю живая ли еще ссылка.
http://www.delphi3d.net/download/corona.zip - на ту же тему.


 
Lambda   (2006-05-04 12:51) [9]

Fosgen, твое решение - явно не то, чего просит человек. Причем здесь блики? Ему, как правильно заметил antonn, нужен блум.
Посмотреть на реализацию можно здесь http://www.delphi3d.net/download/hdr_fbo.zip
Правда, Том написал алгоритм честного расчета HDR, котрый совершенно не годится для динамичных игр :), так что тебе, Pa5ha, придется оптимизировать алгоритм.
Советую почитать, как сделать качественный фейк. Смотреть здесь:
http://www.dyingduck.com/sotc/making_of_sotc.html


 
grisme ©   (2006-05-04 19:21) [10]

> Pa5ha   (30.04.06 00:15)
Тебе нужен Glow-эффект. Принцип его сказал XProger ©   (30.04.06 00:19) [1]


 
XProger ©   (2006-05-04 21:47) [11]

grisme, глоу немного иначе делается :)

- рендерим сцену в текстуру мелкого размера (до 128х128)
- смазываем это дело несколько раз до нужной кондиции
- рендерим сцену на весь экран
- поверх всего этого с аддитивным наложением накладываем прозрачный полигон с нашей текстуркой

В итоге получим glow или bloom эффект (как хотите ;)


 
Pa5ha   (2006-05-04 21:49) [12]

А как сделать чтоб на гф2 работало? :)

GLScene не знаю.


> Fosgen   (04.05.06 10:04) [8]

мне нужен не алгоритм проверки  видимости блика а собственно отрисовка солнца, чтоб красиво. На шейдерах, конечно, красиво, но мощности и ресурсы не позволяют :) Как Прогер сказал сделать то не проблема. Я так сделал. Просто при больших размерах появляется зернистость текстуры. При маленькой текстуре экран светом не заливается. Текстура из игры. В игре зернистости нет. Воть =)


 
Fosgen   (2006-05-05 10:10) [13]

>Lambda
Для тех кто трудный и недоступный - поясняю: принцип создания эффекта LensFX - именно то что надо человеку - создание Glow, Streak, Galo эффектов от солнца.
Для тех кто не знает соответствия английских терминов русским понятиям описываю:
Glow - большой светящийся ореол вокруг источника света
Streak - лучи, видимые глазом\оптикой, от источника света
Galo - светящийся круг, вокруг источника света.

Есть еще ряд эффектов, но все строятся по одному и тому же принципу - при помощи прозрачных билбордов. Как сказал XProger:"С блендингом режима - сложение".
Можно еще постобработкой отрендереного изображения, но это со своими сложностями связано.

>Pa5ha
А чтобы было красиво - и заодно - реалистично - НУЖЕН алгоритм проверки видимости источника света. Про видимость блика я не писал - внимательно прочти. А-то у тебя солнце стеной закроется, а ослепляющий (Glow) эффект от него - останется?

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


 
Lambda   (2006-05-05 11:44) [14]

Fosgen, я уже понял, что с адекватным восприятием у тебя определенные проблемы, поэтому еще раз отсылаю тебя к первому посту Pa5ha:

> Как сделать солнце, чтоб если на него смотришь, то весь
> экран заливается светом?

ГДЕ ты видишь "большой светящийся ореол вокруг источника света"?
Ты со своими "уникальными" идеями давно устарел, потому что glow теперь уже трактуется иначе, чем 5 лет назад, которые ты, очевидно, провел под общим наркозом.
Требуемый bloom-эффект (понятно, что фейковый) без использования шейдеров (Pa5ha, давно пора обновить систему :)) можно получить только по методу XProger [11].


 
grisme ©   (2006-05-05 14:13) [15]

XProger ©   (04.05.06 21:47) [11]
Глоу,насколько я помню, это же эффект "свечения",а не размытия.:-X


 
Fosgen   (2006-05-05 14:31) [16]

>grisme ©
Размытие для немного другого эффекта - эдакого "затуманивания" сцены.

>XProger ©
Только сдается мне что glow-эффект и bloom-эффект - несколько разные вещи... Glow - исключительно от источников света зависит. А Bloom - скорее "атмосферный" эффект.

>Lambda
А ты вообще шел бы лесом... Адекватный ты наш...  Посмотрел бы как в последних версиях 3D MAX"а трактуется glow... Сравнивая две трактовки я почему-то (интересно - почему?) выбираю - MAX. А ты - никуда не уперся со своей трактовкой, однако.


 
XProger ©   (2006-05-05 14:48) [17]

Fosgen, эти методом можно создать оба эффекта (пусть и LDR bloom, но всё же)


 
Fosgen   (2006-05-05 16:14) [18]

>XProger

Согласен. Только визуально эффекты-то будут разные все же... И если для bloom"а требуется "размытие" всей сцены, то для Glow - размытие текстуры "свечения".


 
Lambda   (2006-05-05 16:25) [19]

Fosgen, лесом будешь сам топать к своей бабушке, чтобы рассказать ей, что такое glow. Сегодня это частный случай HDR-эффектов. И здесь, неадекватный ты наш, не форум 3D-моделеров, а форум программистов графики, поэтому я (интересно, почему?), выбираю трактовку, имеющую прямое отношение к реализации требуемого эффекта в игре, а не в среде моделирования.
Ты человеку хоть что-нибудь посоветовал, кроме не относящихся к теме бликов? Нет? Тогда не разводи флейм.

Pa5ha, думаю ты уже понял, что совет XProger"а для тебя будет лучшим решением, ну а если разживешься картой с поддержкой шейдеров, то тебе прямая дорога сюда [9]. Удачи


 
XProger ©   (2006-05-05 16:51) [20]

Суть то одна - рендерим всё светящееся и размываем :)


 
Lambda   (2006-05-05 17:06) [21]

Именно :)


 
Pa5ha   (2006-05-05 18:14) [22]

Я понимаю, что Вы имеете ввиду, но это чуточку не то. Как рисовать билборды, как рисовать хало и как проверять их видимость я знаю. Меня интересует только сам вот такой эффект, который Вы сможете найти по ниже приведенным ссылкам +)
http://sampo.ru/~pashav/files/effect/1.jpg - солнце-билборд с текстурой.
http://sampo.ru/~pashav/files/effect/2.jpg - начинает заливаться светом. Прошу заметить, что экран заливается светом по направлению от солнца, а не просто полигон на вест экран выводится.
http://sampo.ru/~pashav/files/effect/3.jpg - продолжает
http://sampo.ru/~pashav/files/effect/4.jpg - вот так выглядит солнце, которое я хочу сделать. Экран почти полностью залит светом. Причем заливается, прошу заметить от солнца, а не просто весь экран.

Все картинки весят по 10 кб. Некоторые 9. Radio Control Flight Simulator 6.01.

А есть реализация Lens flare не на ГЛСцене?


 
XProger ©   (2006-05-05 18:37) [23]

bloom с доп текстурами (полигон на весь экран)


 
Pa5ha   (2006-05-05 22:23) [24]

А можно чуточку подробнее?

ЗЫ.: Солнце занимает не весь экран, а маленькую его часть (обычно)


 
Fosgen   (2006-05-06 08:50) [25]

Епрст... Pa5ha, а ты мой пост [8], где по-пунктам расписано внимательно причитал?
А то тут всякие типа Lambda, воду мутят... Ты их слушай побольше - вообще ничего не поймешь, он только крутыми терминами кидается, и пристебывается к чему попало. Потому как все за чужими исходниками охотится - ко мне тут подъезжал - пытался под видом помощи и интереса "выцыганить" сорцы моего проекта - обломался и очень за это обиделся. С тех пор - все связанное со мной обливает грязью. Так что ты на нашу перепалку внимания не обращай.
Я точно знаю как относительно дешевым способом делать твой эффект. Частично это пересекается с тем что тебе написал XProger.

Так вот - повторяю:
На твоих скриншотах имеется самый стандартный Glow эффект. Причем создается он именно так как я описывал - с учетом экранных координат источника света. Потому и получается что заливается ОТ источника света - т.е. от солнца. Для этого "размывать" всю картинку не надо - только текстуру для билборда.

http://nehe.gamedev.net/data/lessons/delphi/lesson36.zip - ссылка на пример по радиальному размытию (Radial Blur) для текстуры.

http://nehe.gamedev.net/data/lessons/delphi/lesson44.zip - реализация ВСЕХ эффектов Lens Flare (не на GLScene), связанных с источниками света, включая требуемый тебе Glow. Реализация - с учетом "перекрытия" источника света.

Что тебе мешает билборд Glow, для создания "слепящего" эффекта - масштабировать так как тебе надо, до требуемых величин? Таким образом получишь - увеличивающуюся "заливку" начинающуюся от солнца...

Мда... И шейдеры тут как мне кажется - нафиг не нужны...


 
Lambda   (2006-05-06 14:15) [26]

Fosgen, если с головой проблемы, то нафига на форум свои помои выливать? Я ведь могу не полениться и нашу, хм.., переписку выложить на всеобщее обозрение (модератору: разумеется не на форуме :)). Не хочешь оценить реакцию здравомыслящих людей на "происки охотника за чужими сорцами"?

В принципе, о сложностях твоих отношений с собственным мыслительным аппаратом, говорит хотя бы твоя фраза из [25] поста:


> Так вот - повторяю:
> На твоих скриншотах имеется самый стандартный Glow эффект.
>


Ну что тут еще можно сказать... А то Pa5ha не знал, что у него там имеется. Вообще-то человек интересовался тем, как ему это реализовать.

Ну а теперь по-существу :)
Pa5ha, еще раз перечитай подробное изложение [11] алгоритма создания эффекта? Потом скажи спасибо XProger"у ;)


 
Fosgen   (2006-05-06 20:03) [27]

2: Lambda - давай выкладывай. Только сдается мне что если я выложу у себя на ресурсе, наши варианты будут несколько отличаться и опять же никто не докажет у кого - верный. Самое веселое - ты хоть понял что взбеленился именно тогда когда тебе в исходниках отказали? И до сих - пор это для тебя самое больное место - видать я точно угадал... И вообще, может пояснишь - если мой проект такой отстой, то чего же ты в первых писмах писал "в принципе, идея меня заинтересовала" (цит.) и вообще - чего лез в участники, если как ты позже писал: "нафиг не надо ни  
игрокам, ни, тем более, издателю"? Вот уж у кого проблемы с головой - сам себ противоречишь, али просто заврался? И кстати такое поведение как твое, при переписке демонстрируют исключительно подонки - я тебя кстати ни в одном письме не оскорблял и никаких эпитетов к тебе не применял. И уж тем более - не блокировал тебе возможность ответить на любые возражения. А такие твои поступки - уже просто показатель трусости.

>Pa5ha, я думаю тебе уже достаточно вариантов предложили. Решай сам какой тебе более удобен - любой из них - рабочий. Потом, можешь отмахнуться - какой дал тот эффект, что тебе требовался. А то мы тут глотки рвем друг-другу, а может все дело в неточном понимании твоих задач.


 
Pa5ha   (2006-05-14 13:11) [28]


> Что тебе мешает билборд Glow, для создания "слепящего" эффекта
> - масштабировать так как тебе надо, до требуемых величин?
>  Таким образом получишь - увеличивающуюся "заливку" начинающуюся
> от солнца...

про этот косяк я уже писал. При масштабировании появляются пиксели текстуры. Это была моя первая идея :)

http://nehe.gamedev.net/data/lessons/delphi/lesson44.zip - скачал, но к сожалению не смог оценить без набора текстур то, что хотел показать автор. У меня просто хало появляется и исчезает без эффектов =)

Радиальное размытие - интересно, можно попробовать поиграться.

Я очень ценю мнение XProger-a, но без примера я буду пытаться сделать что-нить стоящее этим методом, не зная что должно получиться в итоге до второго пришествия ;)


 
XProger ©   (2006-05-14 14:36) [29]

http://img118.imageshack.us/img118/2658/bloom7qj.jpg - пример работы простенького эффекта Bloom (авторTWINc)

Суть такая, рендерим всё что светится в тектуру, размазываем текстуру и выводим поверх уже отрисованного изображения с аддитивным блендингом.
Неоптимизированный пример:

procedure render_bloom;
const
 BLUR_COUNT = 8; // кол-во проходов смазывания
var
 sbuf : array [0..bw - 1, 0..bw - 1] of TRGBA;

 procedure Blur;
 var
   idx     : Integer;
   x, y    : Integer;
   R, G, B : Integer;
   dbuf    : array [0..bw - 1, 0..bw - 1] of TRGBA;

   procedure get(x, y: Integer);
   begin
     if (x > -1) and (y > -1) and (x < bw) and (y < bw) then
     begin
       inc(R, sbuf[x, y].R);
       inc(G, sbuf[x, y].G);
       inc(B, sbuf[x, y].B);
       inc(idx);
     end;
   end;

 begin
   for y := 0 to bw - 1 do
     for x := 0 to bw - 1 do
     begin
       idx := 0;
       R   := 0;
       G   := 0;
       B   := 0;
       get(x - 1, y - 1);
       get(x, y - 1);
       get(x + 1, y - 1);
       get(x + 1, y);
       get(x, y);
       get(x - 1, y);
       get(x - 1, y + 1);
       get(x, y + 1);
       get(x + 1, y + 1);
       dbuf[x, y].R := R div idx;
       dbuf[x, y].G := G div idx;
       dbuf[x, y].B := B div idx;
       dbuf[x, y].A := 255;
     end;
   Move(dbuf, sbuf, SizeOf(dbuf));
 end;

var
 i : Integer;
begin
 glViewport(0, 0, bw, bw);
 // рисуем
 glBindTexture(GL_TEXTURE_2D, Buffer);

 glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, bw, bw, 0);
 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, @sbuf);
 for i := 1 to BLUR_COUNT do
   Blur;
 glTexImage2D(GL_TEXTURE_2D, 0, 4, bw, bw, 0, GL_RGBA, GL_UNSIGNED_BYTE, @sbuf);

 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 glViewport(0, 0, glWidth, glHeight);
 // рисуем
 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
 // рисуем полигон с текстурой Buffer на весь viewport
end;

bw - размер текстуры


 
Fosgen   (2006-05-15 10:42) [30]

2 Pa5ha:
Возьми билборд, отмасштабируй до нужного размера, затем - "размой" по примеру Xproger"а и получишь то что надо...



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.068 c
11-1155395535
parovoZZ
2006-08-12 19:12
2007.04.15
KOL и 64 бит Windows


15-1174641109
RDen
2007-03-23 12:11
2007.04.15
ICQ


15-1174214156
PARUS
2007-03-18 13:35
2007.04.15
Пятничные задачки.


15-1174417424
TUser
2007-03-20 22:03
2007.04.15
Найти хорошую дорогу


2-1175081209
Lixodei
2007-03-28 15:26
2007.04.15
Экспорт в Excel