|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Stepan Polovnikov 2:5056/16.47 12 May 2001 17:02:59 To : Eugene Kilachkoff Subject : realtime raytracing --------------------------------------------------------------------------------
>> обьектах подлежащих детализации сосредотачивать рендер, т.е. делать 1x1 а
>> там где можно, рендерить 2x2 или 4x4... что с успехом делает heaven7.
EK> Вот это уже идея. Это почти то же самое, чего я и хотел. 2all: народ,
EK> натолкните меня на мысль: как конкретно это реализовать. Кривизну
EK> поверхности там оценивать, количество объектов в данном участке
EK> пространства или еще чего ?
Ковырял rubicon. Там реализован слудующий алгоритм (возможно adaptive grid).
Сразу об ограничениях:
1. Исчезание плоских объектов (в проекции экрана) или маленького размера.
2. Максимальное число объектов 32.
Hапример. Дано разрешение трассировки 640х480. Создается массив претрассировки
162х122 32битных слов (соответствует числу объектов), каждый бит которого
определяет наличие пересечения с одним из 32 объектов. Претрассируются лучи с
шагом 4 на наличие пересечений.
DWORD PreTraceArray[162,122]
; претрассировка
for(y=1;y<121;y++)
for(x=1;x<161;x++)
if (obj=Intersect((x-1)*4,(y-1)*4)) ; obj-номер объекта
SetBit(x,y,obj) ; установка бита в массиве
SetBit(x-1,y,obj) ; претрассировки PreTraceArray
SetBit(x,y-1,obj)
SetBit(x-1,y-1,obj)
; трассировка
for(y1=1;y<121;y++)
for(x1=1;x<161;x++)
for(y0=0;y<4;y++)
for(x0=0;x<4;x++)
x=(x1-1)*4+x0
y=(y1-1)*4+y0
mask=PreTraceArray[y1,x1]
if (mask==0)
; в текущей клетке объектов нет - цвет фона
; т.е. 4х4 расчетов пересечения делалось 1 раз
SetColor(x,y,Background)
else
; в TraceRay проверка пересечений только
; для объектов в маске mask
SetColor(x,y,TraceRay(x,y,mask))
Bye!
--- GoldED+/W32 snapshot-2001.02.24
* Origin: NETMAIL (2:5056/16.47)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/223903afd3c13.html, оценка из 5, голосов 10
|