Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Papervision] Как запихнуть jpg, dae и.т.п. внутрь swf (fla -> swf)? (http://www.flasher.ru/forum/showthread.php?t=134939)

vector3d 12.01.2010 16:28

Вложений: 1
Здравствуйте.

Моделирую в 3dmax-е, перегоняю через Swift3D в *.fla файл (экспорт в Papervision3D).

Задумался, как встроить dae, jpg файлы на этапе компиляции, что бы файл new.swf при запуске, не подгружал dae, jpg файлы а хранил всю структуру 3d объектов и все текстуры внутри swf-ки.

Так вот, new3.dae встроить смог (исходник ниже):
http://www.game.30fps.ru/new3.rar
Добавил [Embed(source="01Default.jpg")] встраивания 01Default.jpg.

Не могу изменить код чтобы фото было опознано текстурой.

Для компиляции проекта понадобиться:
- Adobe Flash CS4 Professional
- Для использования [Embed] Flash CS4 потребуется flex_sdk_3

Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.utils.ByteArray;
 
        import flash.utils.Dictionary;
 
        import org.ascollada.*;
 
        import org.papervision3d.cameras.*;
        import org.papervision3d.materials.*;
        import org.papervision3d.materials.utils.*;
        import org.papervision3d.materials.shadematerials.*;
        import org.papervision3d.objects.*;
        import org.papervision3d.objects.parsers.*;
        import org.papervision3d.lights.*;
        import org.papervision3d.scenes.*;
        import org.papervision3d.render.*;
        import org.papervision3d.view.*;
        import org.papervision3d.core.*;
        import org.papervision3d.core.math.*;
        import org.papervision3d.core.proto.*;
        import org.papervision3d.events.FileLoadEvent;
 
        import mx.core.BitmapAsset;
 
 
        public class ERMain extends MovieClip
        {
 
 
                [Embed(source="new3.dae", mimeType="application/octet-stream")]
                private var BinaryData:Class;
 
                [Embed(source="01Default.jpg")]
                private var Photo:Class;
 
 
 
                // Member variables
                public var mCamera                                                :Camera3D;
                public var mCollada                                                :DAE;
                public var mSceneCenter                                        :Number3D;
                public var mRenderer                                        :BasicRenderEngine;
                public var mViewport                                        :Viewport3D;
                public var mLight                                                :PointLight3D;
 
                private var mContainer                                        :Sprite;
 
                private var mRadius                                                :Number;
                private var mRootNode                                        :DisplayObject3D;
                private var mRotationAnchor                                :Number3D;
 
                private var mScene                                                :Scene3D;
 
                private var mTarget                                                :DisplayObject3D;
 
                private var mWheelZoomAmount                        :Number                                = 1.10;
 
 
 
 
                // Создаем новый экземпляр встроенных данных
                var byteArray:ByteArray = new BinaryData( );
                // Преобразуем экземпляр данных в XML-файл
                var data:XML = new XML(byteArray.readUTFBytes(byteArray.length));
 
                // Растровое изображение, встраиваемое
                // на уровне переменной
                var photo:BitmapAsset = new Photo();
                //addChild(photo);
 
 
 
                // Constructor for the ERMain class
                public function ERMain()
                {
 
 
                        addChild(photo);
 
 
                        stage.quality = "HIGH";
                        stage.scaleMode = "noScale";
 
                        // 3D redraw mechanism as the 3D scene is manipulated
                        this.addEventListener( Event.ENTER_FRAME, EROnEnterFrame );
 
                        // Set the event handlers for the mouse to the stage so we will
                        // handle all mouse events not just those that click on a display
                        // object in this class.  These event handlers handle the interactive
                        // rotation and mouse wheel zooming.
                        stage.addEventListener(MouseEvent.MOUSE_DOWN, ERMouseDownHandler);
                        stage.addEventListener(MouseEvent.MOUSE_UP, ERMouseUpHandler);
                        stage.addEventListener(MouseEvent.MOUSE_WHEEL, ERMouseWheelHandler);
 
                        mRotationAnchor = new Number3D;
 
                        // Perform the 3D initialization.
                        ERInitialize();
                }
 
 
                // This method creates and initializes the 3D scene.
                private function ERInitialize():void
                {
                        // Create canvas movieclip and center it
                        this.mContainer = new Sprite();
                        addChild( this.mContainer );
                        this.mContainer.x = 275;
                        this.mContainer.y = 200;
 
                        this.mViewport = new Viewport3D(550, 400, true, true);
                        addChild( mViewport );
 
                        this.mRenderer = new BasicRenderEngine();
 
                        // Create Scene
                        this.mScene = new Scene3D( );
 
 
 
                        this.mTarget = new DisplayObject3D ( );
 
                        // Create Camera.  Camera is based on selected Swift 3D camera at the time of export.
                        this.mCamera = new Camera3D();
                        this.mCamera.x = 284.737;
                        this.mCamera.y = 150.599;
                        this.mCamera.z = -245.317;
 
                        this.mTarget.x = 72.0461;
                        this.mTarget.y = 71.2281;
                        this.mTarget.z = -53.8092;
 
                        this.mCamera.zoom  = 1.0;
                        this.mCamera.fov    = 45;
                        this.mCamera.target = this.mTarget;
 
                        // Establish the scene center to ensure all rotations
                        // occur about that center.
                        this.mSceneCenter = new Number3D;
                        this.mSceneCenter.x = -20;
                        this.mSceneCenter.y = 30;
                        this.mSceneCenter.z = 45;
 
                        this.mLight = new PointLight3D;
                        this.mLight.x = 0;
                        this.mLight.y = 0;
                        this.mLight.z = 0;
 
                        mCollada = new DAE( );
                        mCollada.addEventListener(FileLoadEvent.LOAD_COMPLETE, EROnFileLoaded, false, 0, true);
                        mCollada.load(data);                       
 
                        mRootNode = mScene.addChild( mCollada, "mRootNode" );
                        }
 
 
 
 
                // The next three functions will turn all of the materials to double sided.
                private function EROnFileLoaded( event :Event ):void
                {
                        var lMaterialsList:Object = mCollada.materials;
 
                        if ( lMaterialsList )
                        {
                                for each ( var lMaterial:MaterialObject3D in lMaterialsList )
 
                                        lMaterial.doubleSided = true;
                        }
 
 
                        var lChildren:Dictionary = Dictionary (mCollada.children);
                        ERProcessChildrenMaterials ( lChildren );
                }
 
                private function ERProcessChildrenMaterials ( aChildren:Dictionary ):void
                {
                        if ( aChildren )
                        {
                                for each ( var lChild:DisplayObject3D in aChildren )
                                        ERProcessChildMaterials ( lChild );
                        }
 
                        var lChildren:Dictionary = Dictionary (mCollada.children);
                }
 
                private function ERProcessChildMaterials( aChild:DisplayObject3D ):void
                {
                        if ( aChild )
                        {
                                if ( aChild.materials )
                                {
                                        for each ( var lMaterial:MaterialObject3D in aChild.materials.materialsByName )
 
                                                lMaterial.doubleSided = true;
                                }
 
                                var lChildren:Dictionary = Dictionary (aChild.children);
                                ERProcessChildrenMaterials ( lChildren );
                        }
                }
//.......

new3.dae:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
        <asset>
                <contributor>
                        <authoring_tool>Swift 3D 1.0 for Papervision3D</authoring_tool>
                </contributor>
                <created>2010-01-15T14:32:14Z</created>
                <modified>2010-01-15T14:32:14Z</modified>
                <up_axis>Z_UP</up_axis>
        </asset>
        <library_images>
                <image id="01Default-Image" name="01Default-Image">
                        <init_from>01Default.jpg</init_from>
                </image>
                <image id="09Default-Image" name="09Default-Image">
                        <init_from>09Default.jpg</init_from>
                </image>
        </library_images>
        <library_effects>
                <effect id="01Default-fx">
                        <profile_COMMON>
                                <newparam sid="01Default-Surface">
                                        <surface type="2D">
                                                <init_from>01Default-Image</init_from>
                                                <format>A8R8G8B8</format>
                                        </surface>
                                </newparam>
                                <newparam sid="01Default-Sampler">
                                        <sampler2D>
                                                <source>01Default-Surface</source>
                                                <minfilter>LINEAR_MIPMAP_LINEAR</minfilter>
                                                <magfilter>LINEAR</magfilter>
                                        </sampler2D>
                                </newparam>
//........

Вот этот пример http://shooter2.30fps.ru/new4.swf подгружает файлы:
http://shooter2.30fps.ru/new4.dae
http://shooter2.30fps.ru/01Default.jpg
http://shooter2.30fps.ru/09Default.jpg

Следущий пример http://game.30fps.ru/new3.swf ничего не подгружает, но в нём я не знаю как изменить код для того чтобы он брал фотки внутринние и накладывал их на обьекты.

http://www.game.30fps.ru/new3.rar

Для компиляции проекта понадобиться:
- Adobe Flash CS4 Professional
- Для использования [Embed] Flash CS4 потребуется flex_sdk_3


Смысл в том, что бы файл new.swf при запуске, не подгружал dae, jpg файлы а хранил всю структуру 3d обьектов + текстуры внутри swf-ки.

Dozore 25.02.2010 10:49

У меня похожая задача стоит.
Нужно сделать вращающийся куб, на каждой грани которого фотография.
Вращение куба отрендерил в Swift3D. Но в самой программе нет возможности наложить свои фотографии на грани.
Подгрузка извне не нужна. все нужно в одном свф.
Как лучше это реализовать?

vector3d 02.03.2010 17:30

http://easyflash.org/flashlearn/flat...rvision3d.html

Держи брат :)

chabapok 03.03.2010 23:31

попробуйте так:

Код AS3:

[Embed(source="01Default.jpg")]
public class myName extends BitmapData{тралала}


belai 16.03.2010 17:49

А у меня еще есть такой вопросик...подскажите плиз... )
по нажатию на кнопку загружаю swf сделанный в 3dSwift, а у меня там ничего не крутится...просто пустые кнопки вылазиют(


Часовой пояс GMT +4, время: 04:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.