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

Вниз

Источники света   Найти похожие ветки 

 
Xerx ©   (2004-07-02 05:07) [0]

Доброй ночи (у меня :)! Ночи не сплю, все думаю: как реализовать более 8 источников света в OpenGL. Может как-то по хитрому рисовать или еще что? А если нельзя, то как же реализуют, или это просто точный просчет, что одновременно видно не больше? Получал ответ с предложением использовать OpenGL от NVidia, но он будет нормально работать на карточках не от NVidia?


 
nob   (2004-07-23 13:16) [1]

Делать самому попиксельное освещение на шейдерах
Очень красивый пример на gamedev.ru проект almighty
Можно извращаться как хочешь (в смысле считать свет самому)


 
DeadMeat ©   (2004-07-23 19:08) [2]

Если надо использовать это все на какой то карте, то просто оттекстурируй ее уже освещенную, и используй где надо... А если просто так надо (для чего-нибудь еще), то пожалуй то, что предложил nob...

---
...Death Is Only The Begining...


 
Xerx ©   (2004-07-26 04:24) [3]

Шейдеры хорошо, но они ДАЛЕКО не у всех пойдут!


 
ViK ©   (2004-07-27 03:21) [4]

Где-то видел пример с "накоплением" источников света, в нем можно хоть 100 лампочек создать (если комп потянет такое)
Если найду у себя, то вышлю на мыло


 
NailMan ©   (2004-07-27 21:22) [5]

Не знаю как в OGL, но в директе обойти ограничение на 8 аппаратно поддерживаемых единовременно источников света можно только переключением оных.

Тоесть скажем есть большая сцена(закрытая) на которой в разных местах расположены 20 источников света(спотовые и направленные).
Максимум видеокартой поддерживается 8 включенных источников одновременно. Следовательно напрашивается вывод - надо попеременно включать нужные источники и выключать ненужные. Вопрос - как определить какие нужные а какие нет?
Да очень просто - надо определить какие источники находятся в зоне видимости игрока(или которые имеют какое-то влияние на видимость объектов во фрустуме), а какие нет.

Скажем зачем освещать объекты источником если они удалены очень далеко(скажем для шутера это 300 метров)? Или вообще что-то освещать за спиной игрока если это место далеко и за углом?

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

Другой способ - выключать обработку освещения у объектов, которые попали во фрустум(в зони видимости игрока), но очень удалены(а потому не понятно освещены правильно или нет) от него. В директе это стейтом выключается/включатеся при рендере объекта. Как в OGL незнаю.

Вот такие мысли.

---
WBR, NailMan aka 2:5020/3337.13


 
Белый Крыс ©   (2004-07-27 21:57) [6]

glEnable(GL_LIGHTING); glDisable(GL_LIGHTING); - вообще свет
glEn(Dis)able(GL_LIGHTx); - конкретный источник х = [0, 7].


 
Xerx ©   (2004-07-28 04:19) [7]

> ViK
Жду...
> NailMan
У меня не шутер а что-то типа DungeonKeeper. И много света: факелы, фонарики, светящиеся модели и т.д.
> Белый Крыс
Спасибо за книжную информацию, которая есть в каждой книге. Если бы я и этого не знал, то не лез бы с такими вопросами.


 
NailMan ©   (2004-07-28 09:42) [8]

Xerx ©
Это вид от третьего лица сзади игрока или типа как в Warcraft3(типа 3Д но вид как у изометрии)? Извини но в DungeonKeeper не играл.

Если последний вариант, то определить какой источник надо выключить, а какой включить проще чем в первом случае, так как камера смотрит на ограниченный участок земли, который легко обработать на видимость, а в случае с нормальным видом от третьего лица могут возникать сложные ситуации с видимостями объектов для источников света.

---
WBR, NailMan aka 2:5020/3337.13


 
MrAngel   (2004-07-28 12:12) [9]

Неужели так и не сделали более восьми источников? Хотябы софтварно...


 
NailMan ©   (2004-07-28 14:45) [10]

MrAngel
Если запустишь в софтваре, то хоть MaxInt пользуй.

---
WBR, NailMan aka 2:5020/3337.13


 
Белый Крыс ©   (2004-07-28 15:27) [11]

Спасибо за книжную информацию, которая есть в каждой книге. Если бы я и этого не знал, то не лез бы с такими вопросами.
Всегда пожалуйста. Какие тогда могут быть проблемы?


 
ViK ©   (2004-07-29 02:11) [12]

Можно делать так:
прорисовываем сцену (N div 8)+1 раз, где N - кол-во лампочек; т.е. включаем первые восемь источников и прорисовываем, потом включаем следующие 8 и прорисовываем сцену повторно, только с включеной прозрачностью и т.д. пока не кончатся лампочки; в итоге получаем готовую картинку с N источников света


 
xdev ©   (2004-07-29 18:35) [13]

Можно попробовать сделать эффект освещенности просчитав цвет и покрасить каждый треугольник через glColor. Я писал для этого модуль, если найду скину на мыло.


 
wiz ©   (2004-07-29 19:14) [14]

2 Xerx: есть одна мысль...

вряд ли у тебя _один_ объект освещается более чем восемью источниками (а если ты хочешь больше, то тебе стоит провериться - не будет ли у тебя сумбура в видеообразе?).

Таким образом, пишем лайт-манагер, который вызываем перед отрисовкой каждого объекта (или группы объектов).

Лайт-манагер работает следующем образом:
1) На входе получает координаты объекта, который ты сейчас будешь рисовать (и может быть его размеры).
2) Находит 8-16 источников света к объекту, и вычисляет их влияние на объект (например если источник спотовый и спот направлен в сторону от объекта, то его можно сейчас и не включать).
3) Выбирает из списка 8 значимых лайтов и забивает их в GL_LIGHTx (x=0..7).

В это время программист сидит и пьёт пЫво, фигея от собственной крутости :)

PS: сам такую фишку не писал, но imho работать будет (хотя может быть и медленно).


 
Xerx ©   (2004-07-30 04:39) [15]

> NailMan
Из-за спины. камера сама подстраивается под вращение и перемещение игрока. Вид сверху-сзади (~70 градусов от гориз).
> ViK
Думаешь получиться? Попробую... А какую прозрачность?
> xdev
Жду и надеюсь...
> wiz
Медленно! Очень при таком количестве света, но я попробую...


 
wiz (at work)   (2004-07-30 09:17) [16]

2 Xerx:

моё предложение в плане математики - не очень сложный коллижн менеджер, и объектов в нём не так и много. Так что я думаю считать (если нормально написать и оптимизировать) такой менеджер будет всего пару миллисикунд на кадр (на машинке вроде P3-1000)...

другое дело, что тебе нужно будет заливать в видеокарту (на каждый объект) кучку лампочек (8 x N байт, где N - описание одной лампы ~100-200 байт). Вот тут могут начаться тормоза.

(хотя это наверняка будет быстрее чем способ, предложенный ViK, но может быть медленнее (при правильном написании) чем способ xdev)


 
NailMan ©   (2004-07-30 09:29) [17]

wiz (at work)
А разве в OGL нельзя залить предварительно все источники в девайс, а потом просто энаблить/дизаблить нужные без прокачки всей структуры источника?

---
WBR, NailMan aka 2:5020/3337.13


 
wiz (at work)   (2004-07-30 10:30) [18]

2 NailMan:
Если я правильно понимаю, то слотов под источники света в видюхе (аппаратно) - 8. Они хранятся в памяти карты и их можно просто перетыкать gl(En)/(Dis)able(...). Больше oGL (аппаратно) не позволяет. Т.е. все остальные источники нужно заливать в видюху из ОЗУшки.

Может быть есть какой-нибудь способ закинуть некую структуру в память карты а потом на неё ссылаться... (я о таком даже не слышал, но...)

А может быть есть способы обойти ограничение на 8 источников (какое-нибудь расширение и что-то еще)...

Я не знаю.


 
Darthman ©   (2004-07-30 12:12) [19]

Аппаратно только 8, остальные можно задействовать софтово. Но скорость упадет катастрофически.


 
NailMan ©   (2004-07-30 14:51) [20]

насколько я понял, в D3D SDK(не думаю что OGL в этом отличается от D3D) - ограничение именно на включенные, а не загруженные источники.

"Check the MaxActiveLights member of the D3DCAPS9 structure when you retrieve device capabilities to determine the maximum number of active lights supported by that device. If you no longer need a light, you can disable it or overwrite it with a new set of light properties."

Значит можно нагрузить более 8-ми источников и включить нужные 8(в максимуме). Остальные он будет просто игнорировать и никакого софтвара не будет, так как нефиг.

---
WBR, NailMan aka 2:5020/3337.13


 
wiz ©   (2004-07-30 15:08) [21]

2 NailMan: оп-паньки...

сейчас внимательно перечитаю SDK по oGL


 
ViK ©   (2004-08-02 01:59) [22]

to Xerx
Исходик я выслал, разбирайся там все понятно


 
RagE ©   (2004-08-02 11:02) [23]

ViK ©   (02.08.04 01:59) [22]
а можно и мне исходник? rage_prog@mail.ru


 
MrAngel   (2004-08-02 20:06) [24]

ViK ©   (02.08.04 01:59) [22]
если не сложно то мне тоже... ^-)



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

Форум: "Игры";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.04 c
1-1101300025
Pretender
2004-11-24 15:40
2004.12.05
Подсчет символов


1-1100579612
FastByte
2004-11-16 07:33
2004.12.05
Как создать таблицу в Word из Delphi ?


1-1100861678
Dolphin001
2004-11-19 13:54
2004.12.05
msEquation


11-1083761063
H7LB
2004-05-05 16:44
2004.12.05
KOL editbox maxlength ?


1-1099753589
N@St
2004-11-06 18:06
2004.12.05
RTF <---> HTML





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский