Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Солнце на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.041 c
6-1161634019
Image
2006-10-24 00:06
2007.04.15
Как идентифицировать в локальной сети устройство?


3-1169214222
barakuda
2007-01-19 16:43
2007.04.15
програмная настройка БДЕ


15-1174245266
wl
2007-03-18 22:14
2007.04.15
а где?


3-1169624170
truegosha
2007-01-24 10:36
2007.04.15
ADO и транзакции


1-1171808925
Wahnsinng
2007-02-18 17:28
2007.04.15
Где в реестре можно отключить зук в Internet Explorere?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский