Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Алгоритмические вопросы. | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 7
На страницу: 1, 2, 3, 4, 5, 6, 7  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Алгоритмические вопросы.»
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Коллеги, есть пара вопросов по расчёту цветов при освещении.
Имеется точка, определённого цвета RGB.
Имеется источник света, определённого цвета RGB.
1. Источник освещает точку. Как вычислить её конечный цвет RGB?
2. Несколько источников светят на точку. Как вычислить суммарный RGB цвет истоников (и, далее, п1)?

Не нужно заморачиваться дистанциями, углами, нормалями, материалами, и прочим. Всё предельно просто - есть цвет источника света, есть цвет точки, как посчитать результат.

Первое, что приходит в голову, источники света складывать по OR, а точку освещать по AND.
_________________
У меня бисера не доxеpа.
    Добавлено: 16:46 03-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Shirson :
Первое, что приходит в голову, источники света складывать по OR, а точку освещать по AND.

Если RGB, то вряд ли чистый OR по всему слову.

Потому что 1 OR 2 = 3, а 2 OR 2 = 2, хотя по идее второе должно быть больше.

Понятно, что каждый цвет должен обрабатываться отдельно, т.е. X+Y сделать нельзя, т.к. например G вылезет за пределы, исчезнет, и чуть даст в другой цвет (кто там постарше, B что ли).

Полагаю, что цвет (речь идет про отдельный цвет из R, G и B) ограничен каким-то множеством (0..255 например), и если два источника светят на одно место (X и Y), то наверное результат должен быть больше как X'a, так и Y'a. Или равен наибольшему. Поэтому думаю достаточно выбрать какую-нибудь функцию с ассимптотой 255, желательно симметричной относительно аргументов (т.е. f(x,y) = f(y,x)).

Первый самый простой пример такой функции
f1(x,y) = max(x,y)

Второй пример (мне нравится (; ) - релитивисткое сложение цветов:
f2(x,y) = (x+y)/(1 + x*y/c^2), где c=255
т.е. суммируя два (и более) любых цвета мы получим освещенное не больше некоторого предела (255), и к нему оно будет стремиться плавно
т.е. например f(100,200) = ~229.

Цвет точки полагаю это какого она цвета, когда она освещена ярко по максимуму по всему RGB. Т.е. цвет точки определяет максимальное значение цвета. Во втором примере функции это число 'c' для каждого соответствующего R, G, B (c(R), c(G), c(B)). Или обрезать по верхнему пределу в случае первого примера ( f(x,y) = min( max(x,y), c) ).
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (19:23 03-09-2014), всего редактировалось 9 раз(а)
    Добавлено: 17:08 03-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Minx :
Если RGB, то вряд ли чистый OR по всему слову.
Потому что 1 OR 2 = 3, а 2 OR 2 = 2, хотя по идее второе должно быть больше.

Надо на натуре посмотреть. Если погрешности незаметны для глаза - вполне схавательно.
Цитата:
Второй пример (мне нравится (; ) - релитивисткое сложение цветов:
f(x,y) = (x+y)/(1 + x*y/c^2), где c=255
т.е. суммируя два (и более) любых цвета мы получим освещенное не больше некоторого предела (255), и к нему оно будет стремиться плавно
т.е. например f(100,200) = ~229.
Это я уже даже где-то видил Улыбка

Цитата:
Цвет точки полагаю это какого она цвета, когда она освещена ярко по максимуму по всему RGB. Т.е. цвет точки определяет максимальное значение цвета.
Были такие рассуждения, что цвет точки принимается за 1, соответсвтенно уровень освещённости меняет цвет от 0 (нет света) до 1 (максимальный свет). Что-то мне в этом не понравилось... непомню уже что Я не при чем...

Цитата:
Во втором примере функции это число 'c' для каждого соответствующего R, G, B (c(R), c(G), c(B)). Или обрезать по верхнему пределу в случае первого примера ( f(x,y) = min( max(x,y), c) ).
Это хороший вариант, надо опробовать.

Кстати, как в этом варианте быстро и просто организовать засветки? Т.е. когда интенсивность света настолько вылика, что высвечивает точку (в пределе) до белого?
_________________
У меня бисера не доxеpа.
    Добавлено: 17:53 03-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Shirson :
Надо на натуре посмотреть. Если погрешности незаметны для глаза - вполне схавательно.

Тут могут быть внезапные погрешности по разрядам числа (в 2 c/c). Т.е. 128 OR 127 = 255, 128 OR 128 = 128. Это будет проявляться случайно, резко, и думаю будет раздражать.

Shirson :
Были такие рассуждения, что цвет точки принимается за 1, соответсвтенно уровень освещённости меняет цвет от 0 (нет света) до 1 (максимальный свет). Что-то мне в этом не понравилось... непомню уже что

Выше и сейчас не очень понял что такое цвет точки. Поэтому решил, что это цвет, когда точка освещена по-максимуму. Т.е. если это АЧТ, то оно и в темноте и на свете АЧТ. Если это зеленое, то оно на свету зеленое и черное в темноте.
Можно принять цвет точки как цвет при каком-то определенном освещении. Т.е. если RGB = #808080, то цвет такой, какого цвета тело. Но мне кажется это лишняя сложность.

Shirson :
Кстати, как в этом варианте быстро и просто организовать засветки? Т.е. когда интенсивность света настолько вылика, что высвечивает точку (в пределе) до белого?

Может превышение некоторого предела или процента от цвета точки есть засветка. По-моему, это уже от конкретной задачи зависит.
Обычно точка комнаты или освещена, или нет, и тени разной интенсивности. Так чаще всего минимальное освещение воспринимается. А что-то большее - отражательные поверхности, вспышка слева, ... - по-моему, это лучше делать всего другим слоем, другой абстракцией. И опять же, от задачи зависит.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 18:08 03-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Что-то не склеилось с формулой.
x=120; y=0; c=89; f=120;
Хм... Цвет точки просто так суда совать явно нельзя
_________________
У меня бисера не доxеpа.
    Добавлено: 18:50 03-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Да, формула предполагает, что изначально двигаться быстрее 'c' нельзя.

У меня ещё был вариант (третий для списка выше):

f3(x,y) = x + (c - x)*y/c

он вроде обладает теми же свойствами, что и релитивисткий (ассимптота к 'c'), и очень похож по результатам. Но релятивисткий прикольнее и убедительнее (в плане ассимптоты).

Вообще эти случаи как-то несовсем предсказуемо ведут себя при выше 'c'. Например 300+0 быстрее, чем 300+300. Поэтому если нет предела цвета, то на них наверно нужно забить.

Код:
  x     y     c            f3   f2
100   200   255   221.5686275   229.4325198
  1     1   255   1.996078431   1.999969243
120   120   255   183.5294118   196.4872521
 50    70   255   106.2745098   113.8708501
500   200   255   307.8431373   275.8218452
250   250   255   254.9019608   254.9500098
255   255   255           255   255
 20    30   255   47.64705882   49.54285714
240    50   255   242.9411765   244.8198637
210    60   255   220.5882353   226.173913
256   254   255   255.0039216   255.0019608
300   300   255   247.0588235   251.6690856
300    10   255   298.2352941   296.3285557

_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (19:23 03-09-2014), всего редактировалось 8 раз(а)
    Добавлено: 19:20 03-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Может банальное сложение с ограничением? Или оно не катит?

Т.е.

f4(x,y) = min( x+y, c )

И сделать засветку при 'c'.

Ведь OR по существу работает почти как сложение (если биты разные). Но не всегда в полное сложение (если биты одинаковые).

Или сделать какой-нибудь гибрид (между f1 и f4, в плюс половина сложения):

f5(x,y) = min( max(x,y) + min(x,y)/2, c)

получится почти как OR, только без внезапных прыганий.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (19:50 03-09-2014), всего редактировалось 3 раз(а)
    Добавлено: 19:21 03-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
f4 не прокатит, min(x+y, c)это вообще ад Улыбка
Скорее что-нибудь вроде min(max(x,y), c)
Надо потестить на реальных цветах.
_________________
У меня бисера не доxеpа.
    Добавлено: 19:43 03-09-2014   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Shirson :
Не нужно заморачиваться дистанциями, углами, нормалями, материалами, и прочим. Всё предельно просто - есть цвет источника света, есть цвет точки, как посчитать результат.

Эм. Какбэ очень сильно зависит.
Если тебе для реала - то аддитивно и нужно определять границы для RGB LDR, ибо обычно 32bpp.
Если для виртуала - источник может иметь любой алгоритм смешивания, необязательно аддитивный, и необязательно иметь положительную интенсивность. Точка опять же может очень по-разному реагировать на освещённость.
Если совсем тупо, то clamp((point_color + light_color),255), но это к случаю самосветимости точки плюс будет выглядеть глупо, т.к. для засветики необходимо превышение всех трёх компонентам уровня среза LDR. Если точка не самосветима - то скорее clamp((point_color * light_color * light_intensity),255). Всё же засветка обычно делается только на блике.
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 21:44 03-09-2014   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Ну ребят вы даете. Ух ты!..

В CG делают так: http://en.wikipedia.org/wiki/Rendering_equation

В частном случае
Shirson :
Коллеги, есть пара вопросов по расчёту цветов при освещении.
Имеется точка, определённого цвета RGB.
Имеется источник света, определённого цвета RGB.
1. Источник освещает точку. Как вычислить её конечный цвет RGB?
2. Несколько источников светят на точку. Как вычислить суммарный RGB цвет истоников (и, далее, п1)?

Не нужно заморачиваться дистанциями, углами, нормалями, материалами, и прочим. Всё предельно просто - есть цвет источника света, есть цвет точки, как посчитать результат.


1) Color = Light_color * Point_color;
2) Color = SUM( Light_color_i * Point_color );

В случае LDR color в промежутке [0..255]. В случае HDR - промежуток больше, но там надо будет переводить назад в [0..255] с помощью tone mapping'а.

Да, сумма.

Да, оно может выйти за 255, и это пределы монитора. Хотите - делайте HDR, где нет ограничения в 255, но есть другие приколы

добавлено спустя 7 минут:
Shirson :
Кстати, как в этом варианте быстро и просто организовать засветки? Т.е. когда интенсивность света настолько вылика, что высвечивает точку (в пределе) до белого?

Это HDR. Вообще то что вы пытаетесь тут сделать очень напоминает мне Tone Mapping - http://en.wikipedia.org/wiki/Tone_mapping
Как раз перевод из одного пространства цвета в другой.

Ну и в HDR засвеченные (у которых цвет больше 255) участки размывают, создавая "свечение", все равно вы это не нарисуете на мониторе
_________________
MOV topka, C++

Последний раз редактировалось: Jurec (10:35 04-09-2014), всего редактировалось 2 раз(а)
    Добавлено: 00:39 04-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Изначально я так понял, что нужна не реальность, а собственный велосипед, чтобы можно было сделать свои краски. И соответственно интересуют способы сборки таких штук.

На днях вот только узнал про почему звезды и источники света у людей изображаются с лучами. Такие штуки тоже надо как-то алгоритмизить.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 01:00 04-09-2014   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Jurec :
Вообще то что вы пытаетесь тут сделать очень напоминает мне Tone Mapping - http://en.wikipedia.org/wiki/Tone_mapping

Если изначально считать в LDR, в белый тоже так же вылезти несложно, благо множители. Достаточно упереться в ограничение цветового диапазона по всем трём компонентам. Более того, эффект bloom (гало вокруг пересвеченных частей изображения), как и некоторые другие интересные вещи также можно легко и спокойно делать в этом пространстве, не нагружаясь расширенным диапазоном.

Minx :
На днях вот только узнал про почему звезды и источники света у людей изображаются с лучами. Такие штуки тоже надо как-то алгоритмизить.

А там-то что алгоритмизить? Улыбка В простейшем случае это текстура в проецируемом положении источника, в более сложном текстуру можно собрать параметрически, но зачем?
Фокус там в том, что у протяжённого яркого источника света таких явных лучей не будет, просто размытый ореол.
Разве что возникает вопрос, как обрабатывать такие штуки, как яркие блики на воде, т.е. в областях переменного размера, формы и положения.
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 02:19 04-09-2014   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Minx :
Изначально я так понял, что нужна не реальность, а собственный велосипед, чтобы можно было сделать свои краски. И соответственно интересуют способы сборки таких штук.

Я пропустил что-то? Откуда это?

Minx :
Такие штуки тоже надо как-то алгоритмизить.

В ray tracing'е может быть. В real-time это делают через фейки. Не все ведь алгоритмизировать, сильно жирно выходит.

Guest :
Если изначально считать в LDR, в белый тоже так же вылезти несложно, благо множители

Что значит вылезти несложно? Не делай ярких источников. Это ведь от сцены зависит. Все так делают и вроде ок. Или делай HDR с тон маппингом

Guest :
Более того, эффект bloom (гало вокруг пересвеченных частей изображения), как и некоторые другие интересные вещи также можно легко и спокойно делать в этом пространстве, не нагружаясь расширенным диапазоном.

Ну например: в одном случае засвет будет в 4 раза больше LDR (4.0), в другом случае будет просто белый цвет (1.0). В LDR эта инфа потеряется, потому что все упрется в 1.0. И блум в таком случае будет абсолютно одинаковый. Что не корректно.
_________________
MOV topka, C++

Последний раз редактировалось: Jurec (10:35 04-09-2014), всего редактировалось 1 раз
    Добавлено: 10:32 04-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Jurec :
Ну ребят вы даете. Ух ты!..
В CG делают так: http://en.wikipedia.org/wiki/Rendering_equation

И что? Хы...
Ну делают, ну молодцы. Мне, с моей задачей, от этого ни холодно, ни жарко Подмигиваю

Цитата:
1) Color = Light_color * Point_color;
2) Color = SUM( Light_color_i * Point_color );

В случае LDR color в промежутке [0..255]. В случае HDR - промежуток больше, но там надо будет переводить назад в [0..255] с помощью tone mapping'а.

Да, сумма.

Да, оно может выйти за 255, и это пределы монитора. Хотите - делайте HDR, где нет ограничения в 255, но есть другие приколы

Вопрос был не про HDR или LDR, а конкретно про способы вычисления освещённости точки. Как сделать HDR я и сам знаю, причём в ракурсе своей задачи. Это-то как раз не проблема. Мне просто нужна была базовая арифметика освещения - предельно просто и предельно быстро Улыбка

Цитата:
Shirson :
Кстати, как в этом варианте быстро и просто организовать засветки? Т.е. когда интенсивность света настолько вылика, что высвечивает точку (в пределе) до белого?

Это HDR.
Нет, Jurec, это взаимоисключающие параграфы Ой, не могу!..
Я спрашиваю как быстро и безболезненно сделать (в ракурсе ответов на предыдущие вопросы) засветку вплоть до выбеливания, а ты говоришь, что это HDR. Который по определению не подразумевает выхода за этот самый range, потому что для него всё что угодно упихивается в этот самый range Улыбка

Вот это HDR:


А мне нужно вот это:


Ы? Улыбка

Цитата:
Вообще то что вы пытаетесь тут сделать очень напоминает мне Tone Mapping - http://en.wikipedia.org/wiki/Tone_mapping
Как раз перевод из одного пространства цвета в другой.
Нихт, как это делать я знаю. Вопрос был про базовую арифметику освешения.


Цитата:
Ну и в HDR засвеченные (у которых цвет больше 255) участки размывают, создавая "свечение", все равно вы это не нарисуете на мониторе
Вторую часть непонял, но это тоже не суть.

Абисняю свой вапроз.
Я делаю третью версию своего roguelike шутера. Первый был сделан на конкурс и работал только с 16 цветами EGA (это было конкурсное условие). Второй наследовал это ограничение и в одной из POC-версий имел готовую систему статического и динамического освещения, реализованную в 16 цветах Улыбка Выглядело это шикарно, а осветительная арифметика была крайне проста (из-за огранчиений по цветности).
Источники света были бесцветными
Интенсивностей света было пять
llDarkness - отсутствие освещения, чёрный результирующий.
llVeryLow - Цвета меньше 8 - в чёрный, больше - в свой тёмный вариант (условно цвет-7)
llLow - Цвета меньше 8 - в тёмно-серый, больше - в в свой тёмный вариант
llNormal - как есть
llOver - - Цвета меньше 8 - в свой светлый вариант (цвет+7), больше - в белый
Вот вся африфетика уже и описана. Всё это прекрасно работало, но хотелось большего.
Сейчас я делаю идейного наследника, но уже в полных цветах.
Соответственно, для расчёта освещения мне нужно понять, как расчитывается освещение для точки от одного или нескольких источников света. Ввиду специфики самой игры, нет заморочек с нормалями, углами, и пр. особенностями трехмерных освещений поверхностей. И всё расчитывается CPU, причём размер крайне небольшой - 49х49 условноточек в идеале, либо до 512х512 при полной обработке.
Нет никаких других вопросов, кроме как заданные в топикстарте - есть RGB-точка, на неё светит RGB-источник(и) света, как вычислить RGB-результат. Интересует только это. Да.
_________________
У меня бисера не доxеpа.
    Добавлено: 16:25 04-09-2014   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Shirson :
Нет никаких других вопросов, кроме как заданные в топикстарте - есть RGB-точка, на неё светит RGB-источник(и) света, как вычислить RGB-результат. Интересует только это.


Начну с цитирования себя же

Jurec :
1) Color = Light_color * Point_color;
2) Color = SUM( Light_color_i * Point_color );


Всё. Улыбка

Теперь флуд по пунктам

Shirson :
И что?
Ну делают, ну молодцы. Мне, с моей задачей, от этого ни холодно, ни жарко

Из этой формулы видно что если источников несколько - цвет нужно суммировать.

Shirson :
Вот это HDR:

Когда я говорю HDR, я больше имею ввиду технологию из cg. А не HDR фотки.
HDR в cg - http://en.wikipedia.org/wiki/High-dynamic-range_rendering

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

Ну скорее всего еще есть заморочка связанная с радиусом освещения источника света. То есть light attenuation.

добавлено спустя 3 минуты:
Shirson :
А мне нужно вот это:


Объясняю на пальцах как это делать:

1) рендерицо все в HDR текстуру. Да, там где цвет может быть больше 255.
2) засвет - это там где цвет как раз таки больше 255.
3) нарисовать на мониторе мы можем только цвета в рамках 0-255, поэтому с засветом надо че-то сделать
4) выделяем участки ТОЛЬКО с засветом
5) блурим их гауссом
6) аддитивно накладываем на остальную картинку

в итоге получаем


_________________
MOV topka, C++

Последний раз редактировалось: Jurec (16:40 04-09-2014), всего редактировалось 3 раз(а)
    Добавлено: 16:39 04-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Jurec :
Начну с цитирования себя же

Jurec :
1) Color = Light_color * Point_color;
2) Color = SUM( Light_color_i * Point_color );


Всё. Улыбка

Я твоя математика не понимать.
Если у меня точка красная 255 и лампочка 255, результат будет 65к? Улыбка

Цитата:
Из этой формулы видно что если источников несколько - цвет нужно суммировать.
Я простой человек, понимающий простые символы. "Суммировать цвет" для меня значит Rr=R1+R2, что изначально не имеет ровно никакого смысла.

Цитата:
Ну скорее всего еще есть заморочка связанная с радиусом освещения источника света. То есть light attenuation.
Если бы мне нужно была помощь с этой заморочкой, я бы про ней спросил Улыбка А мне с ней помощь не нужна совсем Подмигиваю

Цитата:
Объясняю на пальцах как это делать:
1) рендерицо все в HDR текстуру

Это неправильные пальцы. Мне неважно что и в какую текстуру рендерится. Потому что у меня не рендерится вообще ничего. Мне нужна арифметика освещения в понятных простому человеку терминах.
_________________
У меня бисера не доxеpа.
    Добавлено: 17:12 04-09-2014   
Olorin
 70 EGP


Рейтинг канала: 1(6)
Репутация: 12
Сообщения: 97
Откуда: Хьёрвард
Зарегистрирован: 27.02.2006
Shirson :
Jurec :
Начну с цитирования себя же

Jurec :
1) Color = Light_color * Point_color;
2) Color = SUM( Light_color_i * Point_color );


Всё. Улыбка

Я твоя математика не понимать.
Если у меня точка красная 255 и лампочка 255, результат будет 65к? Улыбка

Если цвет источников 0-255 и цвет точки 0-255, то видимый будет...

Псевдо-C#-c-LINQ:

resultColor = pointColor * Max(lightsColor.Select(c => c / 255.0).Sum(), 1.0) // для каждой компоненты

Засветка проходом сверху по растру: интенсивность компоненты каждой точки увеличиваем пропорционально количеству точек с интенсивностью 255 поблизости.
_________________
Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший

Последний раз редактировалось: Olorin (17:47 04-09-2014), всего редактировалось 3 раз(а)
    Добавлено: 17:39 04-09-2014   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
Doj озвучил это так
Result := RGB(Color.R * Light.R / 255, Color.G * Light.G / 255, Color.B * Light.B / 255);
(вот такое я понимаю Подмигиваю )
А свет брать по максимуму (как у Минкса)

Кажись решилось, спасибо усэм Улыбка
Теперь буду это имплементировать.
*бормочет под нос* Плюс попробовать придуманное решение пролемы с освещеним за стенкой в один блок...
_________________
У меня бисера не доxеpа.

Последний раз редактировалось: Shirson (17:51 04-09-2014), всего редактировалось 1 раз
    Добавлено: 17:48 04-09-2014   
Minx
 985 EGP


Модератор
Рейтинг канала: 6(329)
Репутация: 135
Сообщения: 10533
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Shirson :
Нет никаких других вопросов, кроме как заданные в топикстарте - есть RGB-точка, на неё светит RGB-источник(и) света, как вычислить RGB-результат. Интересует только это.

Пациент: "Я понимаю Ширсона."
Доктор (роняя очки на стол): "Оп-паньки..."

(;
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (18:12 04-09-2014), всего редактировалось 1 раз
    Добавлено: 18:11 04-09-2014   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Olorin :
resultColor = pointColor * Max(lightsColor.Select(c => c / 255.0).Sum(), 1.0) // для каждой компоненты

А единичка зачем? Подозрение. Этак у тебя получается, что при отсутствии освещения или слабом освещении точка имеет полностью свой цвет, то есть самосветима.

Shirson :
Result := RGB(Color.R * Light.R / 255, Color.G * Light.G / 255, Color.B * Light.B / 255);

(вот такое я понимаю Подмигиваю )

Да, только свет по всем источникам просуммировать (и удалённость от источника ещё наверное надо - а значит интенсивность каждого источника ещё делить на расстояние до точки, или на квадрат расстояния, или... Подмигиваю).
Ну то есть мега такая Result := RGB(Color.R * (Light1.R/Light1.Dist(point) + Light2.R/Light2.Dist(point) + ...) / 255, Color.G * (Light1.G/Light1.Dist(point) + Light2.G/Light2.Dist(point) + ...) / 255, Color.B * (Light1.B/Light1.Dist(point) + Light2.B/Light2.Dist(point) + ...) / 255);
_________________
Трещит земля как пустой орех
Как щепка трещит броня

Последний раз редактировалось: Guest (19:01 04-09-2014), всего редактировалось 1 раз
    Добавлено: 18:54 04-09-2014   
Канал Игры Мечты: «Алгоритмические вопросы.»
На страницу: 1, 2, 3, 4, 5, 6, 7  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Ты меня видел живьем.(RenderG) - Нет. Только пьяным.(ТехноМаг)

  » Алгоритмические вопросы. | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18