Simple3D - простий 3D-движок на ActionScript 3

Simple3D - це мініатюрний 3d-движок від такого Pradeek-а, написаний наActionScript 3.0. Цей двигун підтримує наступний набір можливостей:

- невелика колекція тривимірних примітивів (Cone,Cube,Cylinder,Plane таSphere );

- Завантаження 3D-моделей у форматіASE (так, скажімо чесно, не найпопулярніший формат для тривимірних моделей).

До переваг цього двигуна можна віднести наступне:

- просто освоюється та використовується;

- Додає до кінцевого розміру flash-проекту лічені кілобайти (і завдяки цьому його можна використовувати навіть при створенні банерів, коли розмір строго лімітований).

Є й очевидні недоліки:

- обмежений набір можливостей щодо створення та маніпулювання тривимірними об'єктами;

- Помилки (зверніть потім особливу увагу на примітив Куб).

Давайте розглянемо Simple3D докладніше.

Отже, двигун у нас вже є. Тепер давайте із ним працювати. Для початку створимо простий тривимірний примітив -Sphere (сфера).

/* імпортуємо класи */ import com.simple3d.primitives.Sphere; /* Створюємо об'єкт єдиний параметр у конструктора об'єктів Sphere - це радіус сфери (100) */ var sphere: Sphere = new Sphere (100); /* позиціонуємо об'єкт на сцені флеш-ролика */ sphere.x = 275; sphere.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(sphere); /* Малюємо об'єкт */ sphere.render();

Повірте на слово - це сфера :-) Особливо хочу підкреслити, що флеш-ролик, що вийшов, важить. менше 5 Kb. А якщо вас не влаштовує колір (за умовчанням об'єкти забарвлюються в чорний колір), то це легко виправити.

/* імпортуємо класи */ import com.simple3d.primitives.Sphere; /* створюємо об'єкт єдиний параметру конструктора об'єктів Sphere - це радіус сфери (100) var sphere: Sphere = new Sphere (100); /* перефарбуємо об'єкт у червоний колір */ sphere.color = 0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */ sphere.x = 275; sphere.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(sphere); /* Малюємо об'єкт */ sphere.render();

Примітиви Simple3D розширюють клас Sprite і маніпуляції, доступні для спрайтів, можна здійснювати і з тривимірними примітивами Simple3D. Наприклад, ми можемо повертати та обертати наші тривимірні об'єкти.

/* імпортуємо класи */ import com.simple3d.primitives.Sphere; import flash.events.Event; /* Створюємо об'єкт єдиний параметр у конструктора об'єктів Sphere - це радіус сфери (100) */ var sphere: Sphere = new Sphere (100); /* перефарбуємо об'єкт у червоний колір */ sphere.color = 0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */ sphere.x = 275; sphere.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(sphere); /* Повертаємо об'єкт на 45 градусів */ sphere.rotationY = 45; /* обертаємо об'єкт */ addEventListener(Event.ENTER_FRAME, onEnterFrames); function onEnterFrames(event:Event):void < /* повертаємо на 1 градус у кожному кадрі */ sphere.rotate(1); /* перемальовуємо об'єкт */ sphere.render(); >

Примітив можна не лише пофарбувати у певний колір, а й "натягнути" на нього текстуру. Як така текстура повинен виступати об'єкт класуBitmapData.

/* імпортуємо класи */ import com.simple3d.primitives.Sphere; import flash.events.Event; import flash.display.BitmapData; /* створюємо текстуру з допомогою шуму Перлина */ var bitmapData:BitmapData = new BitmapData(100,100,false,0x000000); bitmapData.perlinNoise(100,100,10,10,true,true); /* створюємо об'єкт перший параметр- це радіус сфери (100) другий параметр - текстура */var sphere: Sphere = new Sphere (100, bitmap Data); /* перефарбуємо об'єкт у червоний колір */ sphere.color = 0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */ sphere.x = 275; sphere.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(sphere); /* Повертаємо об'єкт на 45 градусів */ sphere.rotationY = 45; /* обертаємо об'єкт */ addEventListener(Event.ENTER_FRAME, onEnterFrames); function onEnterFrames(event:Event):void < /* повертаємо на 1 градус у кожному кадрі */ sphere.rotate(1); /* перемальовуємо об'єкт */ sphere.render(); >

Ефект буде ще цікавішим, якщо в якості текстури використовувати картинку. Наприклад, таку:

3d-движок

УAdobe Flash це реалізується надзвичайно просто (про те, як перетворити картинку на клас, що розширює BitmapData, дивись пост Календар з функцією вибору дати на ActionScript 3.0).

/* імпортуємо класи */ import com.simple3d.primitives.Sphere; import flash.events.Event; /* створюємо текстуру */ var earthmap: Earthmap = new Earthmap(); /* створюємо об'єкт перший параметр - це радіус сфери (100); другий параметр - текстура */ var sphere:Sphere = new Sphere(100,earthmap); /* перефарбуємо об'єкт у червоний колір */ sphere.color = 0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */ sphere.x = 275; sphere.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(sphere); /* Повертаємо об'єкт на 45 градусів */ sphere.rotationY = 45; /* обертаємо об'єкт */ addEventListener(Event.ENTER_FRAME, onEnterFrames); function onEnterFrames(event:Event):void < /* повертаємо на 1 градус у кожному кадрі */ sphere.rotate(1); /* перемальовуємо об'єкт */ sphere.render(); >

Робота з рештою 3D-примітивів у Simple3d дуже сильно нагадуєвикористання розглянутого вище примітиву Сфера. Наведу приклади.

Примітив Cone (конус).

/* імпортуємо класи */ import com.simple3d.primitives.Cone; import flash.events.Event; /* створюємо текстуру */ var gr >

Примітив Cube (куб).

/* імпортуємо класи */ import com.simple3d.primitives.Cube; import flash.events.Event; /* створюємо текстуру */ var gr >

Примітив Cylinder (циліндр).

/* імпортуємо класи */ import com.simple3d.primitives.Cylinder; import flash.events.Event; /* створюємо текстуру */ var brick:Brick = new Brick(); /* створюємо об'єкт перший параметр - радіус циліндра (40); другий параметр - висота циліндра (100); третій параметр - текстура */ var cylinder:Cylinder = new Cylinder(40,100,brick); /* перефарбуємо об'єкт у червоний колір */cylinder.color=0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */cylinder.x = 275; cylinder.y = 200; /* додаємо об'єкт на сцену флеш-ролика */ addChild(cylinder); / * Повертаємо об'єкт на 45 градусів * / cylinder.rotationY = 45; /* обертаємо об'єкт */ addEventListener(Event.ENTER_FRAME, onEnterFrames); function onEnterFrames(event:Event):void < /* повертаємо на 1 градус у кожному кадрі */ cylinder.rotate(1); /* перемальовуємо об'єкт */ cylinder.render(); >

Примітив Plane (площина).

/* імпортуємо класи */ import com.simple3d.primitives.Plane; import flash.events.Event; /* створюємо текстуру */ var tile: Tile = new Tile (); / * Створюємо об'єкт перший параметр - ширина площини другий параметр - висота площини третій параметр - текстура * / var plane: Plane = new Plane (200,200, tile); /* перефарбуємо об'єкт у червоний колір */ plane.color = 0xff0000; /* позиціонуємо об'єкт на сцені флеш-ролика */ plane.x = 275; plane.y = 200; /*додаємо об'єкт на сцену флеш-ролика */addChild(plane); /* Повертаємо об'єкт на 45 градусів */ plane.rotationY = 45; /* обертаємо об'єкт */ addEventListener(Event.ENTER_FRAME, onEnterFrames); function onEnterFrames(event:Event):void < /* повертаємо на 1 градус у кожному кадрі */ plane.rotate(1); /* перемальовуємо об'єкт */ plane.render(); >

Якщо щось незрозуміло, то можете завантажити вихідні дані до цього уроку - завантажити вихідний код (підAdobe Flash CS 5.5 ). До вихідників додається і бібліотека класів Simple3D.

Дата завантаження: 2012-06-15

Рейтинг посту: 6