Пример включения модулей


рис. 17

В данном примере будет два включаемых модуля, описывающих модели “0” и “1”
и один модуль “матрица”, который формирует сцену из выше указанных моделей:

Модуль “0.txt”
start{
 camera (0,-80,0)-(0,0,0)-0.3-1000
 scenerotate (0,0,0)-(2,1,0)
}
objects
plate (0,1,0)-(0,1,0) // перед 0
plate (0,-1,0)-(0,-1,0) // зад 1
plate (0,0,-2)-(0,0,1) // низ 2
plate (0,0,2.5)-(0,0,-1) // верх 3
plate (-3,0,0)-(-1,0,0) // лево 4
plate (3,0,0)-(1,0,0) // право 5
plate (-1.5,0,0)-(1,0,0) // лево внутри 6
plate (1.5,0,0)-(-1,0,0) // право внутри 7
cilin (0,-1,2.5)-(0,1,2.5)-3 // вверх внешний 8
cilin (0,-1,2.5)-(0,1,2.5)-1.5 // вверх внутри 9
cilin (0,-1,-2)-(0,1,-2)-3 // низ внешний 10
cilin (0,-1,-2)-(0,1,-2)-1.5 // низ внутренний 11
models
gabar (-4,-1.5,6)-(-4,1.5,6)-(4,1.5,6)-(4,-1.5,6)-(-4,-1.5,-6)-(-4,1.5,-6)-(4,1.5,-6)-(4,-1.5,-6) cube
4,$7F7F7F,O0+O1+^O2+^O3
5,$7F7F7F,O0+O1+^O2+^O3
6,$7F7F7F,O0+O1+^O2+^O3
7,$7F7F7F,O0+O1+^O2+^O3
8,$7F7F7F,O0+O1+O3
9,$7F7F7F,O0+O1+O3
10,$7F7F7F,O0+O1+O2
11,$7F7F7F,O0+O1+O2
0,$7F7F7F,O4+O5+O6*O7*O2*O3+O9+O11+^O8*^O3+^O10*^O2
1,$7F7F7F,O4+O5+O6*O7*O2*O3+O9+O11+^O8*^O3+^O10*^O2

Модуль “1.txt”
start{
 camera (0,-80,0)-(0,0,0)-0.3-1000
 scenerotate (0,0,0)-(2,1,0)
}
objects
plate (0,1,0)-(0,1,0) // перед 0
plate (0,-1,0)-(0,-1,0) // зад 1
plate (0,0,-5)-(0,0,-1) // низ 2
plate (0,0,5.5)-(0,0,5.5) // верх 3
plate (-3,0,0)-(-1,0,0) // лево 4
plate (3,0,0)-(1,0,0) // право 5
plate (-1,0,0)-(-1,0,0) // лево ствол 6
plate (1,0,0)-(1,0,0) // право ствол 7
plate (0,0,3.5)-(0,0,-1) // низ носа 8
cilin (-3,-1,6.5)-(-3,1,6.5)-3 // верх носа 9
plate (0,0,-4)-(0,0,1) // верх подошвы 10
models
gabar (-4,-1.5,6)-(-4,1.5,6)-(4,1.5,6)-(4,-1.5,6)-(-4,-1.5,-6)-(-4,1.5,-6)-(4,1.5,-6)-(4,-1.5,-6) cube
2,3,O0+O1+O4+O5
4,3,O0+O1+O10+O2
5,3,O0+O1+O10+O2
7,3,O0+O1+^O10+O3
10,3,O0+O1+O4+O5+^O6*^O7
6,3,O0+O1+^O10+^O8
8,3,O0+O1+O4+^O6
9,3,O0+O1+O4+O3
3,3,O0+O1+O4+O9+O7
0,3,O4+O5+O2+O3+O7*O10+O6*O10*O8+O9
1,3,O4+O5+O2+O3+O7*O10+O6*O10*O8+O9

Модуль “matrix.txt”
start{
  camera (0,-50,0)-(0,0,0)-0.3-1000
  light (-200,-200,100)-0.2-500-$2F4F2F
  scenerotate (0,0,0)-(2,1,0)
  gint a[]
  for i=0 to 15 {
   a[i]=rnd(2)
  }
  gint level=0
}
vec pos [] = ( (-17,0,17),(-6,0,17),(6,0,17),(17,0,17), (-17,0,6),(-6,0,6),(6,0,6),(17,0,6), (-17,0,-6),(-6,0,-6),(6,0,-6),(17,0,-6), (-17,0,-17),(-6,0,-17),(6,0,-17),(17,0,-17) )
vec posa
for i=0 to 15 {
  posa=pos[i]
  if a[i] = 0 then {
   "zero.txt", posa
  }
  else {
   "one.txt", posa
  }
}
level=level+1
if level=180 then {
  for i=0 to 15 {
   a[i]=rnd(2)
  }
}

В программе matrix.txt задан массив координат цифр матрицы pos[].
При включении модуля используется вектор posa,
потому что элементы массива в качестве параметра использовать нельзя.
(индекс массива в данном случае представляет собой выражение, которое в данном блоке обработано быть не может).
В данном примере каждые 180 кадров комбинация нулей и единиц в матрице меняется.


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