Пример использования зеркальных поверхностей


рис. 25

Пример “testreflex.txt”:
start {
camera (0,-250,20)-(0,0,0)-0.2-1000
light (-150,-150,-90)-0.4-600-$5F7F5F
scenerotate (0,0,45)-(1,0,0)
gdbl h=0
gdbl v=90
}
dbl p=20*cos(v*pi/180)
plate (0,0,-70)-(0,0,1)
plate (-100,0,0)-(-1,0,0)
plate ( 100,0,0)-(1,0,0)
plate (0,-100,0)-(0,-1,0)
plate (0,100,0)-(0,1,0)
0,$7F7F7F
/0.5,O1+O2+O3+O4
//include
"testtorro.TXT", (0,0,0), (h,v,0)
//spher (0,0,p)-50
//0,$7F0000,
h=h+2
if h=360 then{
h=0
}
v=v+1
if v=360 then {
v=0
}

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

Отражение работает для всех видов поверхности. Чтобы сделать расчет отражения, программе необходимо вычислять нормаль (перпендикуляр) в каждой точке отражения, вычислять луч отражения, а уже для него делать трассировку всей сцены. Поэтому расчет отражения процесс достаточно трудоемкий. Кадры формируются заметно медленее.

Ниже приведен пример отражения с включенным освещением и тенью. В примере используются ранее приведенные модули.

Пример 2 “testreflex2.TXT”:
start {
"matrix.txt"
camera (-30,-200,-10)-(0,0,0)-0.2-1000
light (-150,-150,-90)-0.4-600-$5F7F5F
scenerotate (10,15,0)-(0,0,0)
gint hh=0
gint vv=0
}

dbl hhh=45*cos(hh*pi/180)
"scaf.txt",(0,0,0)-(hhh,0,0),1
"matrix.txt",(30,-100,0),(hh,vv,0),1
hh=hh+2
if hh=360 then {
hh=0
}
vv=vv+1
if vv=360 then {
vv=0
}
cilin (-170,-20,-50)-(-170,-20,50)-30
plate (0,0,-50)-(0,0,-1)
plate (0,0, 50)-(0,0, 1)
0,$7F0000/0.5,O1+O2


рис. 26

Примечание:
В данном примере вращающаяся матрица цифр формируется модулем “matrix.txt”, который включен вместе с модулем “scaf.txt”. В модуле “scaf.txt” стекло сделали не прозрачным, но отражающим. Модули указаны с параметрами вращения вокруг своего центра координат. Однако модуль “matrix.txt” также упомянут в разделе “start” без параметров. Это сделано потому, что сам модуль содержит раздел “start”, и чтобы выполнить инициализационные действия с ним его тоже надо включать в раздел “start” вызывающего модуля. Чтобы не забывать это делать возьмите за правило включать в раздел start все включаемые модули.

Перейти на следующую страницу Перейти на предыдущую страницу
Сайт управляется системой uCoz