Vavilov8 | Дата: Пятница, 29.07.2011, 23:27 | Сообщение # 1 |
VIP
Группа: Администраторы
Сообщений: 42
Репутация: 0
Статус: Offline
|
Прочитал урок про вращению куба, который опубликован ниже, и решил сделать урок с более реалистичным кубом. Из этого урока вы научитесь создавать свой 3D куб.
И так. Создаем новый Flash File (ActionScript 3.0) и вставляем в первый кадр данный ниже код. Компилируем. И видем, что у нас перед глазами крутится 3D куб. Ура, товарищи! Урок окончен. Более подробное описание кода дано в коментариях. Всем спасибо.
Code
//Клип, в котором будут находиться вершины куба. var cube:MovieClip = new MovieClip(); //Координаты куба в сцене. var X:int = 275; var Y:int = 200; //Длина грани куба. var d:uint = 200; //Координаты вершин куба. var corX:Array = new Array(-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2,-d/2); var corY:Array = new Array(-d/2,-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2); var corZ:Array = new Array(-d/2,-d/2,-d/2,-d/2,d/2,d/2,d/2,d/2); //Массив цветов граней куба. var colors:Array = new Array(0x0000cc, 0x00cc00, 0xcc0000, 0xcccc00, 0x00cccc, 0xcc00cc); //Массив вершин куба. var dots:Array = new Array(8); //Массив граней куба. var sides:Array = new Array(6); //Индексы вершин при построении треугольников граней куба. var indices:Vector.<int> = new Vector.<int>(); indices.push(0,1,2,0,2,3); //------------------------------------------------------------------- createCube(); stage.addEventListener(Event.ENTER_FRAME, rotateCube); //------------------------------------------------------------------- //Функция создания куба. function createCube():void { //Размещаем наш куб в заданных нами координатах. addChild(cube); cube.x = X; cube.y = Y; //Добавляем вершины куба в один МувиКлип, чтобы можно было легко ими вращать в сцене. for (var i:uint = 0; i < dots.length; i++) { //Создаем спрайты, которые будут "контейнером" для вершин куба. var p:Sprite = new Sprite(); p.x = corX[i]; p.y = corY[i]; p.z = corZ[i]; cube.addChild(p); dots[i] = p; } //Создаем грани куба. for (var j:uint = 0; j < sides.length; j++) { var s:Sprite = new Sprite(); addChild(s); sides[j] = s; } //Отрисовываем куб. renderCube(); } //Функция отрисовки куба. function renderCube():void { //Создаем вспомогательные точки. var point:Point = new Point(); var point3d:Vector3D = new Vector3D(); //Создаем массивы, которые будут хранить глобальные координаты вершин по Х и У. var points2dX:Array = new Array(8); var points2dY:Array = new Array(8); //Переводим локальные координаты вершин куба в глобальные. for (var i:uint = 0; i < dots.length; i++) { point = dots[i].local3DToGlobal(point3d); points2dX[i] = point.x; points2dY[i] = point.y; } //Создаем массив со списками вершин граней. var vertices:Array = new Array(Vector.<Number>([points2dX[0], points2dY[0], points2dX[1], points2dY[1], points2dX[2], points2dY[2], points2dX[3], points2dY[3]]), Vector.<Number>([points2dX[1], points2dY[1], points2dX[5], points2dY[5], points2dX[6], points2dY[6], points2dX[2], points2dY[2]]), Vector.<Number>([points2dX[5], points2dY[5], points2dX[4], points2dY[4], points2dX[7], points2dY[7], points2dX[6], points2dY[6]]), Vector.<Number>([points2dX[4], points2dY[4], points2dX[0], points2dY[0], points2dX[3], points2dY[3], points2dX[7], points2dY[7]]), Vector.<Number>([points2dX[4], points2dY[4], points2dX[5], points2dY[5], points2dX[1], points2dY[1], points2dX[0], points2dY[0]]), Vector.<Number>([points2dX[3], points2dY[3], points2dX[2], points2dY[2], points2dX[6], points2dY[6], points2dX[7], points2dY[7]])); //Отрисовываем грани куба. for (var j:uint = 0; j < sides.length; j++) { sides[j].graphics.clear(); sides[j].graphics.beginFill(colors[j]); sides[j].graphics.drawTriangles(vertices[j], indices, null, TriangleCulling.NEGATIVE); sides[j].graphics.endFill(); } } //Функция ващения куба. function rotateCube(e:Event):void { //Поворачиваем куб по оси У на один градус каждый кадр. cube.rotationY -= 1; //Отрисовываем новое положение куба. renderCube(); }
|
|
| |