Вход

Просмотр полной версии : [Papervision] Как запихнуть jpg, dae и.т.п. внутрь swf (fla -> swf)?


vector3d
12.01.2010, 16:28
Здравствуйте.

Моделирую в 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 (http://download.macromedia.com/pub/flex/sdk/flex_sdk_3.zip)


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:
<?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 (http://download.macromedia.com/pub/flex/sdk/flex_sdk_3.zip)


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

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

vector3d
02.03.2010, 17:30
http://easyflash.org/flashlearn/flatexttutorials/572-sozdanie-3d-kuba-s-pomoshhyu-papervision3d.html

Держи брат :)

chabapok
03.03.2010, 23:31
попробуйте так:

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

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