Плавное вращение камеры в Alternativa3d + multiple загрузка Embed ресурсов

В моем варианте используется небeзызвестный TweenLite, смотрим под кат
все очень просто, в параметры передаем rotationX, rotationY или rotationZ (свойство камеры):

private var rot_speed:Number = 2;
private var camera:Camera3D;

function init()
{
     camera = new Camera3D(0.01, 1000);
     camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0xA6ADA3, 0.5, 4);
     stage.addChild(camera.view);

     controller = new SimpleObjectController(stage, camera, 50);

     controller.lookAtXYZ(0,0,0);

     scene.addChild(camera);
     stage.addEventListener(KeyboardEvent.KEY_DOWN, onShortcut);
}
 
function onShortcut(e:KeyboardEvent):void {
  if (e.keyCode == Keyboard.O) {
  {
     TweenLite.to(camera, rot_speed, {rotationX:camera.rotationX+
                  90*Math.PI/180});                             
  }
  if (e.keyCode == Keyboard.L) {
  {
     TweenLite.to(camera, rot_speed, {rotationX:camera.rotationX-
                  90*Math.PI/180});                             
  }
}


upd: вот и пример работы кода, вращение камеры производится на I-вверх, K-вниз, L-вправо, J-влево

А так же я решил показать пример загрузки встраиваемых моделей и текстур.

Для хранения лучше использовать отдельный класс
package  
{
        /**
         * ...
         * @author MXPain
         */
        public class Assets 
        {
                //встраивание моделей и текстур во флэшку
                [Embed("assets/cratesbarrels/crate01.3ds", mimeType = "application/octet-stream")] 
                public static const crateModel01:Class;  
                
                [Embed(source = "assets/cratesbarrels/crate01.jpg")] 
                public static const crateTexture01:Class;  
                
                [Embed(source = "assets/cratesbarrels/wilkoc1.jpg")] 
                public static const crateTexture02:Class;
                
                [Embed("assets/cratesbarrels/barrel01.3ds", mimeType = "application/octet-stream")] 
                public static const barrelModel01:Class;  
                
                [Embed(source = "assets/cratesbarrels/barrel01.jpg")] 
                public static const barrelTexture01:Class;      
                
                public static const res:Array = [[crateModel01, crateTexture01], 
                                                [barrelModel01, barrelTexture01],
                                                [crateModel01, crateTexture02]
                                                ];//храним эмбеды в одном массиве
                
        }

}

Думаю тут все понятно, res это двумерный массивчик для пар модель\текстура. Функция загрузки выглядит следующим образом:
private function loadModels():void {
//создаем парсер
var parser:Parser3DS = new Parser3DS();
   for (var i:int = 0; i < Assets.res.length; i++) 
   {
        parser.parse(new Assets.res[i][0]);
        var mesh:Mesh;
        for each (var object:Object3D in parser.objects) {
                if (object.name == "crate"||object.name == "barrel") {
                mesh = object as Mesh;
                break;
                }
        }
        mesh.scaleX = mesh.scaleY = mesh.scaleZ = obj_scale; 
        //грузим мэш в контекст
        uploadResources(mesh.getResources(false, Geometry));    
        //создаем BitmapTextureResource и  передаем ему наш bitmapData 
        var bmd:BitmapData = (new Assets.res[i][1]).bitmapData;
                                
        var texture:BitmapTextureResource = new BitmapTextureResource(bmd);     
        texture.upload(stage3D.context3D); //добавляем в context3D
        mesh.setMaterialToAllSurfaces(new TextureMaterial(texture));
        models.push(mesh);//заполняем массив моделей для дальнейшей отрисовки
   }
drawLevel();//в этой функции я добавляю модельки на сцену
}


Всем удачи и хорошего настроения;)
  • +3

Комментарии (10)

+2
я что-то ссылки не вижу — интересно просто посмотреть…
0
выложил на дроп dl.dropbox.com/u/15161237/bin.rar
+3
оке
глянул)
только лучше сделать ссылку на swf (пускай даже в дропбоксе)
сам понимаешь там не АссасинКрид3, чтобы архив качать…
0
вращать вверх — O, вращать вниз — L
0
horror812 ну могу ассеты эмбднуть и перевыложить
0
+1 за то чтоб была прямая ссылка до swf.
+2
скачал архив, серый фон + значок альтернативы в углу это всё что удалось увидеть.
0
Тоже ничего не видать.
+2
всем спасибо за коменты, дополнил пост, флешку теперь можно нормально посмотреть.
0
вот сейчас видно в примере, забавная штука. Урок подойдёт для тех кто с альтернативой вообще не работал, для меня например :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.