LINUX.ORG.RU

Ответ на: комментарий от xnick

Скажем так, для игр (т.е. главное рендерить динамически меняющуюся картинку, причем меняется не только положение «камеры», но и новые воксели добавляются).

different_thing
() автор топика
Ответ на: комментарий от different_thing

Ты хочешь именно технологию, или разобраться как оно работает? Если технологию конкретную, то ничего не скажу. А если разобраться, то можешь попробовать Аммерал Принципы программирования в машинной графике, главу про перспективные изображения. По ней можно дубовый рейтрейсинг написать самому, но использовать для игр его не удастся в чистом виде =)

xnick
()
Ответ на: комментарий от different_thing

Когда проволочную модель осилишь, нагугли раскраску по методу Гуро или Фонга. А потом уже сам лучи трассируй, можно из источников света их посылать пучком - это прямая трассировка, а можно из камеры - это обратная. Каждый луч после отражения/рассеивания еще порождает пачку лучей в общем случае. Сколько тебе этих переотражений надо для качества - столько и делаешь.

А простенько - правильно, надо от простого к сложному идти.

xnick
()
Ответ на: комментарий от xnick

Когда проволочную модель осилишь

Это точно в тему? У меня воксели же. Что я не пойму пока, это как смотреть, какие воксели пересекаются с лучом. Их же десятки тысяч, не цикл же по каждому устраивать.

different_thing
() автор топика
Ответ на: комментарий от different_thing

Как раз цикл по каждому и устраивается, считается это все в параллели на видеопроцессоре.

Уберем пока источник света для простоты. У тебя есть глаз, перед глазом стоит экран прозрачный. Этот экран поделен на пиксели. Ты глазом смотришь на пиксель, это у тебя вектор луча образовался. И теперь ты вдоль этого вектора в пределах сцены помаленьку (от вокселя к вокселю) двигаешься, пока в ненулевой воксель не упрешься.

xnick
()
Ответ на: комментарий от xnick

Короче, у тебя есть луч, ты его для простоты задал через параметр t. При t = 0 у тебя точка в камере, при t = tmax - где-то далеко. Как узнать, какие воксели пересекутся с лучом? Либо если сделать цикл по параметру t, как узнать, какие воксели пересекутся с точкой?

Тут вариант либо «в лоб» (это как раз циклы по вокселям), либо может какие-нибудь R-деревья (первое, что на ум пришло)

different_thing
() автор топика
Ответ на: комментарий от different_thing

Короче, у тебя есть луч, ты его для простоты задал через параметр t.

x = k1t+b1

y = k2t+b2

z = k3t+b3

При конкретном t0 получаем конкретный воксель x0,y0,z0. Или я тебя не понял?

xnick
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.