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-ки.
Моделирую в 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-ки.