![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2013
Сообщений: 4
|
Доброго всем дня! Люди добрые, помогите плз! Не могу справиться с заданием… - это не допуск к экзамену со всеми вытекающими последствиями… Около 2-х месяцев назад мы начали изучать 3DMax и месяц назад Flash Develop, так что уровень моих познаний близок к нулю… Несколько дней читала ваш форум и пыталась что-то сделать сама, но как-то не очень получается… Помогите плз сделать задание на ВАШИХ условиях! Крайний срок сдачи 15.06… 17-го экзамен.
Предмет: компьютерные мультимедийные системы(ведет бывший преподаватель физики). Суть задания: используя пакет Flash Develop необходимо написать программу, которая бы вращала модель созданную в 3Dmax (model2.max) и экспортированную в формат .3ds(model14.3ds). Воспроизводится анимация должна в flash player-Е . При этом необходимо создать панель управления вращением, с возможностью изменения скорости вращения модели и угла отклонения стержня от вертикального вала. Изменение скорости вращения и угла должно производиться "ползунками". Задание построено на базе примера решения задачи по физике, только сильно упрощенное. Фото задачи прилагаю (правда написано на белорусском языке), там важен чертеж по которому строилась модель. Модель я в 3DMax-е сделала (не судите строго ), экспорт сделала (файлики приложены в архиве models.rar), но никак не могу ее «загрузить» (или увидеть) в флэш плеере FD. Текст выводиться, «менюшки» выводятся, а сама модель – нет. Может при экспорте текстуры где-то потеряла… Тут бы уже преподке хотя бы модель в FD показать, а если её еще хоть разок крутнуть получиться! ) Набравшись смелости выкладываю код… Тока громко не смейтесь, ладно…package { import com.gskinner.motion.easing.Cubic; import alternativa.engine3d.containers.DistanceSortContainer; import alternativa.engine3d.controllers.SimpleObjectController; import alternativa.engine3d.core.Camera3D; import alternativa.engine3d.core.Object3DContainer; import alternativa.engine3d.core.View; import alternativa.engine3d.core.Sorting; import alternativa.engine3d.loaders.MaterialLoader; import alternativa.engine3d.loaders.Parser3DS; import alternativa.engine3d.loaders.events.LoaderEvent; import alternativa.engine3d.objects.Mesh; import com.gskinner.motion.GTween; import com.gskinner.motion.GTweener; import com.gskinner.motion.easing.Linear; import com.gskinner.motion.easing.Quintic; import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageDisplayState; import flash.display.StageScaleMode; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.geom.Vector3D; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; //import flash.utils.ByteArray; /** * ... * @author pr1 */ //[Embed(source="../bin/model3.3DS", mimeType="application/octet-stream")] public class Main extends Sprite { //задаем частоту развертки кадров в секенду [SWF(backgroundColor = "#DAE9F7", frameRate = "50")] private var rootContainer:Object3DContainer = new Object3DContainer();//корень сцены private var loader3ds:URLLoader;//загрузчик формата 3ds private var camera:Camera3D;//камера private var contoller:SimpleObjectController;//контролер камеры //private var array:ByteArray = new ByteArray();//масив //окно пораметров private var parametrs:MovieClip;//окно с пораметрами private var paramWinstate:String;//состояние окна private var help:MovieClip;//окошко с helpom private var helpWinstate:String;//состояние окна private var title:MovieClip;//заголовок модели //индикатор загрузки модели private var progress:MovieClip; //для состояния окон свернуто/развернуто private static const SPIN:String = "spin"; private static const UNSPIN:String = "unspin"; //время выдвижения окон public static const TWIN_TIME:Number = 1; public static const FULLSCREEN_TRESHOLD:int = 5; private var fullscreenTime:int = 0; //части модели private var Disk1:Mesh; private var vertBrus:Mesh; private var horizBrus:Mesh; private var Disk:Mesh; private var isStart:Boolean = false; private var wasLoaded:Boolean = false; //пораметры модели private var brusHeight:Number = 47.6;//высота бруса private var brusRadius:Number = 33.1;//длина 2-го бруса private var allpha:Number = 60;//угол private var v:Number = 0.0;//скорость private var targetv:Number = 0.4; private var pv:Array = []; //установка камеры public var cameraRadius:Number; public var cameraRotationX:Number; public var cameraRotationXold:Number; public var cameraRotationZ:Number; private var oldX:Number; private var oldY:Number; private const CAMERA_Y_RANGE:Number = 25; private const CAMERA_X_RANGE:Number = 200; private const CAMERA_DISTANCE_FAR:Number = 120; private const CAMERA_DISTANCE_CLOSE:Number = 150; private const MODEL_CENTER_X:Number = 7.21; private const MODEL_CENTER_Y:Number = -8.05; public function Main():void { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var text:TextField = new TextField(); text.multiline = true; text.wordWrap = true; text.text = "0-0==-==0650-6007-0opkjpkkp"; this.addChild(text); initScene(); } //модель 3d private function initScene():void { //создание сцены camera = new Camera3D(); camera.view = new View(stage.stageWidth, stage.stageHeight); addChild(camera.view); cameraRadius = CAMERA_DISTANCE_CLOSE; //начальные позиции camera.rotationX = -130 * Math.PI / 180; camera.x = 200; camera.y = -200; camera.z = 150; contoller = new SimpleObjectController(stage, camera, 200); rootContainer.addChild(camera); contoller.lookAt(new Vector3D(0, 0, 100)); loader3ds = new URLLoader(); loader3ds.dataFormat = URLLoaderDataFormat.BINARY; loader3ds.load(new URLRequest("model4.3DS")); loader3ds.addEventListener(Event.COMPLETE,onLoadingComplete); //окно title = new title5(); title.x = 800 / 2; title.y = -5; paramWinstate = SPIN; parametrs = new parameters5(); parametrs.x = 0; var tabButton:MovieClip = parametrs.window.tab; //tabButton.addEventListener(MouseEvent.CLICK, tabPressed); tabButton.buttonMode = true; //пораметры модели //parametrs.window.speed.addEventListener(Event.CHANGE, onSpeedChange); //parametrs.window.speed.addEventListener(Event.CHANGE, onHeightChange); //parametrs.window.speed.addEventListener(Event.CHANGE, onRadiusChange); //parametrs.window.speed.addEventListener(Event.CHANGE, onAllphaChange); //parametrs.window.ok.addEventListener(MouseEvent.CLICK, onOK); parametrs.y = 600 / 2; helpWinstate = Main.UNSPIN; help = new help_panel(); help.x = camera.view.width - help.width + 50; var tabButton2:MovieClip = help.window.tab; //tabButton2.addEventListener(MouseEvent.CLICK, tabPressed2); tabButton2.buttonMode = true; help.y = 600 / 2; //stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); camera.view.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); camera.view.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); camera.view.addEventListener(MouseEvent.ROLL_OUT, onMouseUp); camera.view.addEventListener(MouseEvent.CLICK, onFullScreen); cameraRotationZ = camera.rotationZ; cameraRotationX = camera.rotationX; cameraRotationXold = camera.rotationX; } //вращение камеры private function onMouseDown(e:MouseEvent):void { oldX = camera.view.mouseX; oldY = camera.view.mouseY; camera.view.addEventListener(Event.ENTER_FRAME, onCameraMove); fullscreenTime = 0; } private function onMouseUp(e:MouseEvent):void { camera.view.removeEventListener(Event.ENTER_FRAME, onCameraMove); cameraRotationZ= camera.rotationZ; cameraRotationXold = camera.rotationX; } private function onCameraMove(e:Event):void { fullscreenTime++; camera.rotationZ = cameraRotationZ + Math.PI / 2 * (camera.view.mouseX - oldX) / CAMERA_X_RANGE; camera.rotationX = cameraRotationXold + (camera.view.mouseY - oldY) / CAMERA_Y_RANGE / 20; if (camera.rotationX - camera.rotationX > CAMERA_Y_RANGE * Math.PI / 180) camera.rotationX = cameraRotationX + CAMERA_Y_RANGE * Math.PI / 180; if(camera.rotationX - camera.rotationX <-1.8* CAMERA_Y_RANGE * Math.PI / 180) camera.rotationX = cameraRotationX -1.8* CAMERA_Y_RANGE * Math.PI / 180; } //полноэкранный режим private function onFullScreen(e:MouseEvent):void { if (fullscreenTime < FULLSCREEN_TRESHOLD) switchFullscreen(); } private function switchFullscreen():void { if (stage.displayState == StageDisplayState.NORMAL) { stage.displayState = StageDisplayState.FULL_SCREEN; } else stage.displayState = StageDisplayState.NORMAL; } //пораметры загрузки private function onLoadingComplete(e:Event):void { progress = new pbar(); addChild(progress); progress.bar.scaleX = 0.0; progress.x = stage.stageWidth / 2 - progress.width / 2; progress.y = stage.stageHeight / 2; var parser:Parser3DS = new Parser3DS(); parser.parse((e.target as URLLoader).data, "model4.3DS"); for (var i:int = 0; i < parser.objects.length; i++){ var mesh:Mesh = parser.objects[i] as Mesh; if (mesh.name == "Disk.Disk") Disk = mesh; if (mesh.name == "Disk") Disk1 = mesh; if (mesh.name == "VertBrus") vertBrus = mesh; if (mesh.name == "HorizBrus") horizBrus = mesh; mesh.weldVertices(); mesh.weldFaces(); mesh.sorting = Sorting.DYNAMIC_BSP; rootContainer.addChild(mesh); } var matiRealLoader:MaterialLoader = new MaterialLoader(); matiRealLoader.load(parser.textureMaterials); matiRealLoader.addEventListener(LoaderEvent.PART_COMPLETE, onMaterialProgress); matiRealLoader.addEventListener(Event.COMPLETE, onMaterialLoader); isStart = true; } private function onMaterialProgress(e:LoaderEvent):void { var percent:Number = e.currentPart / e.partsTotal; progress.bar.scaleX = percent; } private function onMaterialLoader(e:Event):void { wasLoaded = true; addChild(camera.view); addChild(parametrs); addChild(help); addChild(title); removeChild(progress); } } } Последний раз редактировалось k_elena; 11.06.2013 в 18:56. |
|
|||||
|
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
http://a3dplayer.com/
Там можно загрузить код вставки Вашей модели. |
|
|||||
|
Регистрация: Jun 2013
Сообщений: 4
|
vorodis2, спасибо что откликнулись! Не могли бы Вы пояснить - "загрузить код вставки"?
|
|
|||||
|
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
Там можно загрузить модель + текстуры. А потом это скачать как проект, по моему сразу под FlashDevelop. То есть они Вам в архиве зашют папку в которой есть главный класс и ваша модель
|
|
|||||
|
Регистрация: Dec 2006
Сообщений: 1,764
|
k_elena заходим по ссылке вьювера, грузим модель, так же не забываем добавлять к своей модели текстуры, затем когда все загрузилось, смотрим все ли в порядке, после чего жмем кнопку Export to A3D, а после уже когда получили классы, создаем воспроизводим у себя в проекте все это, так же не забываем подключать библиотеки Alternativa3D
__________________
а за окном атлантический океан! |
|
|||||
|
Регистрация: Jun 2013
Сообщений: 4
|
vorodis2, NikolyA - ребята, огромное спасибо за помощь! Все получилось! Осталось разобраться как заставить модель вращаться... Очень надеюсь на Вашу поддержку! Еще раз спасибо!
![]() |
|
|||||
|
Регистрация: Dec 2006
Сообщений: 1,764
|
а разве в генерируемом классе нету описания данной функции?
__________________
а за окном атлантический океан! |
|
|||||
|
Регистрация: Jun 2013
Сообщений: 4
|
что-то я не нашла описания этой функции... может не там искала
. Пока не получается ее вращать... |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|