
Плавное вращение камеры в Alternativa3d + multiple загрузка Embed ресурсов
В моем варианте используется небeзызвестный TweenLite, смотрим под кат
все очень просто, в параметры передаем rotationX, rotationY или rotationZ (свойство камеры):
upd: вот и пример работы кода, вращение камеры производится на I-вверх, K-вниз, L-вправо, J-влево
А так же я решил показать пример загрузки встраиваемых моделей и текстур.
Для хранения лучше использовать отдельный класс
Думаю тут все понятно, res это двумерный массивчик для пар модель\текстура. Функция загрузки выглядит следующим образом:
Всем удачи и хорошего настроения;)
все очень просто, в параметры передаем 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
- MXPain
Комментарии (10)
глянул)
только лучше сделать ссылку на swf (пускай даже в дропбоксе)
сам понимаешь там не АссасинКрид3, чтобы архив качать…