32
private function setShade(vertices:Array) {
var u:Array = [(vertices[0].x-vertices[1].x),(vertices[0].y-
Êvertices[1].y), (vertices[0].z-vertices[1].z)];
var v:Array = [(vertices[1].x-vertices[2].x), (vertices[1].y-
Êvertices[2].y), (vertices[1].z-vertices[2].z)];
var p:Array = [((u[1]*v[2])-(u[2]*v[1])), -((u[0]*v[2])-
Ê(u[2]*v[0])), ((u[0]*v[1])-(u[1]*v[0]))];
var normal:Number = Math.sqrt((p[0]*p[0])+(p[1]*p[1])+(p[2]*p[2]));
var vector:Number = ((p[0]*light.x)+(p[1]*light.y)+(p[2]*light.z));
return ((Math.acos(vector/(normal*light.normal))/
ÊMath.PI)*light.lightness/100);
}
8. Для того, чтобы применить методы класса Light к закрашиванию граней
куба, необходимо сначала определить объект с помощью метода setLight():
public function setLight(x:Number, y:Number, z:Number, lightness:Number) {
light = new Light(x, y, z, lightness);
}
9. Для закрашивания граней используйте переменную rgb массива depths:
rgb = light.setLight([vertex3D[zPolygon[0]], vertex3D[zPolygon[1]],
Êvertex3D[zPolygon[2]]], rgb);
Контрольные вопросы:
1). Что происходит в методе setLight() класса Light?
2). В каких случаях используется команда return() в конце метода?
3). Для чего используются массивы u, v, p в методе setShade() класса Light?
4). Возможна ли ошибка при использовании разных методов (в данном
случае setLight()) в разных классах одного проекта?
5). Как можно охарактеризовать вектор, представляющий нормаль, длина
которой рассчитывается для объекта light?
Лабораторная работа 12
Моделирование полигональных объектов
Цель работы:
1). Изучить построение более сложных полигональных моделей; метод
скрытия невидимых граней при рисовании проекции трёхмерных объектов.
2). Создать приложение для управления вращением сложного
многогранника (24 вершины, четырёхугольные и треугольные полигоны).
Порядок выполнения работы:
1. Создайте новый проект с названием "lab12".