.:: Jasa Membuat Aplikasi Website,Desktop,Android Order Now..!! | | Order Now..!! Jasa Membuat Project Arduino,Robotic,Print 3D ::.

Understanding 3d animation of cube rotations with away3d, actionscript, flash 11.

0 komentar


بِسْــــــــــــــــمِ اﷲِالرَّحْمَنِ اارَّحِيم
bismillaahirrahmaanirrahiim

السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
Assalamu'alaikum warahmatullahi wabarakatuh

This is little video how to make cube and animation only using actionscript and away3d

Understanding 3d animation of cube rotations with away3d, actionscript, flash 11.

I am actually have to made switch to start index on face 3d animation of cube rotation. For example if I press the 'A' key cube customise his rotationX, rotationY, and rotationZ and turn his body, but his face 'A' have to look at me. For this moment I realised how to make a cube with actionscript code and make faces textures like A,B,C,D,E,F images and how to rotate it using Matrix3D and Orientation3D.EULER_ANGLES. At first I tested property rotationX, rotationY and rotationZ using buttons and I realised how can I set them using Matrix3D, for example if I have to set this property (rotationX, rotationY and rotationZ) in general using Matrix3D.recompose

cube.rotationX=-90
cube.rotationY=0
cube.rotationZ=0

It is actually the same

eulerV =
Vector.([new Vector3D(0, 0, 0),
new Vector3D(0, 0, -1.5707963705062866), new Vector3D(1, 1, 1)]);
m3 = new Matrix3D();
m3.recompose(eulerV, Orientation3D.EULER_ANGLES);
cube.transform = m3;


I have to chose Matrix3D and EULER_ANGLES then (rotationX, rotationY and rotationZ) because Matrix3D has special property for animation Matrix3D.interpolate(startMatrix, finishMatrix, procentAnimation).
Here is the actionscript code for Away3D 4.1, flash 11, particularly away3d-core-fp11_4_1_0_Alpha.swc

package
{
import away3d.animators.*;import away3d.core.partition.*;
import away3d.events.*;import away3d.cameras.lenses.*;
import away3d.core.base.*;import away3d.core.math.*;
import away3d.library.assets.*;import away3d.debug.*;
import away3d.cameras.*;import away3d.containers.*;import away3d.entities.*;
import away3d.lights.*; import away3d.materials.*;
import away3d.materials.lightpickers.*;
import away3d.materials.methods.*; import away3d.primitives.*;
import away3d.textures.*;import away3d.filters.*;
import away3d.materials.utils.*;import away3d.primitives.data.*;

import flash.display.*; import flash.events.*; import flash.system.*;
import flash.ui.*; import flash.utils.*; import flash.sampler.*;
import flash.net.*; import flash.media.*; import flash.net.*;
import flash.external.*; import flash.text.*;
import flash.geom.*;


/**
* ...
* @author Lexcuk
*/
public class TestLookAtCubeDoc extends Sprite
{
private var container:ObjectContainer3D;
public var sprite:Sprite;
public var view:View3D;

private var containerArr:Array;

private var blaMaterial:TextureMaterial;
private var hrefTxt:TextField;
private var nArr:Array;

private var cube:ObjectContainer3D;
private var cubeContainer:ObjectContainer3D;

private var customMesh:Object3D;
private var startMatrix:Matrix3D;

private var mat:Matrix3D;

private var eulerCube:Vector.<Vector3D> = Vector.<Vector3D>([
new Vector3D(3.141592502593994, 0, 0),//a-
new Vector3D(-1.5707963705062866, 0, 0),//b-
new Vector3D(0, 0, -1.5707963705062866),//c-
new Vector3D(1.5707963705062866, 0, -1.7484555314695172e-7),//d-
new Vector3D(-8.742277657347586e-8, 1.5707963705062866, 1.570796251296997),//e-
new Vector3D(-1.9749151265220513e-15, -1.5707963705062866, -1.5707963705062866)//f-
]);
private var eulerV:Vector.<Vector3D> =
Vector.<Vector3D>([new Vector3D(0, 0, 0), new Vector3D(0, 1, 0), new Vector3D(1, 1, 1)]);

private var cubeRotationStartMatrix:Matrix3D;
private var cubeRotationTagertMatrix:Matrix3D;
private var animationSpeed:Number = 0.05;
private var animationCount:Number = 0;

private var camScale:Number = 0.6;

public function TestLookAtCubeDoc()
{
view = new View3D();
view.camera.lens.far = 5000;
view.camera.lens.near = 1;

//view.camera.moveTo( 0, 1000, 0);//camA

view.camera.moveTo( 1000*camScale, 500*camScale, 300*camScale);//camB
//view.camera.moveTo( 300, 500, 1000);//camC

view.camera.lookAt(new Vector3D(0, 0, 0))

sprite = new Sprite();
sprite.addChild(view);
sprite.addChild(new AwayStats(view));

addChild(sprite);
customMesh = new Object3D();
var perlinBitmap:BitmapData = getPerlinBmd();
container = new ObjectContainer3D();

view.scene.addChild(container);
var sunLight:DirectionalLight = new DirectionalLight( -1, -0.4, 1);
//with (sunLight) { color = 0xFFFF80; castsShadows = true; ambient = diffuse = specular = 1; }
container.addChild(sunLight);

var bgMesh:Mesh = new Mesh(new PlaneGeometry(1000, 1000));;
bgMesh.y = -100;
var bgMaterial:TextureMaterial = new TextureMaterial(new BitmapTexture(perlinBitmap), false, true);
bgMesh.material = bgMaterial;

container.addChild(bgMesh);

blaMaterial = mekeBlaMaterial();

containerArr = [];

nArr = ['A', 'B', 'C', 'D', 'E', 'F'];

cube = makeContainer(0, 0);
cubeContainer = new ObjectContainer3D();
cubeContainer.addChild(cube);
container.addChild(cubeContainer);

var dir:Vector3D = Matrix3DUtils.getRight(view.camera.transform);
cubeContainer.lookAt(new Vector3D(300,0,150)/*view.camera.position*/, dir);
cubeContainer.rotationX += 30;

sprite.addChild(hrefTxt = new TextField());
hrefTxt.border = true;
hrefTxt.background = true;
hrefTxt.backgroundColor = 0xFFFFFF;
hrefTxt.autoSize = TextFieldAutoSize.LEFT;
hrefTxt.selectable = false;
hrefTxt.x = 150;
hrefTxt.scaleX = hrefTxt.scaleY = 1.4;
var htmStr:String = '';
htmStr = addStrHref('camA') + addStrHref('camB') + addStrHref('camC');
for (var i:int = 0; i < 6; i++) htmStr += addStrHref(nArr[i]);
htmStr += addStrHref('lookAtCamera','\n');
htmStr += addStrHref('clear rotation');
htmStr += addStrHref('x-90');
htmStr += addStrHref('x+90');
htmStr += addStrHref('y-90');
htmStr += addStrHref('y+90');
htmStr += addStrHref('z-90');
htmStr += addStrHref('z+90');


hrefTxt.htmlText = htmStr;
hrefTxt.addEventListener("link", txtNavHandler);

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

}


private function animationEnterFrameHandler(e:Event):void {
animationCount += animationSpeed;
if (animationCount > 1) animationCount = 1;
var m:Matrix3D = Matrix3D.interpolate(cubeRotationStartMatrix, cubeRotationTagertMatrix, animationCount);
cube.transform = m;
if (animationCount >= 1) {
removeEventListener(Event.ENTER_FRAME, animationEnterFrameHandler);
}
}


private function txtNavHandler(e:TextEvent):void {
if (e.text == 'camA') view.camera.moveTo( 0, 1000*camScale, 0);
if (e.text == 'camB') view.camera.moveTo( 1000*camScale, 500*camScale, 300*camScale);
if (e.text == 'camC') view.camera.moveTo( 300*camScale, 500*camScale, 1000*camScale);
view.camera.lookAt(new Vector3D(0, 0, 0));
for (var i:int; i < 6; i++) {
//var dir:Vector3D = Matrix3DUtils.getRight(view.camera.transform);
if (e.text == nArr[i]) {
eulerV[1] = eulerCube[i];
trace('eulerV ' + eulerV);
var m3:Matrix3D = new Matrix3D();
m3.recompose(eulerV, Orientation3D.EULER_ANGLES);
cubeRotationStartMatrix = cube.transform.clone();
cubeRotationTagertMatrix = m3;
animationCount = 0;
addEventListener(Event.ENTER_FRAME, animationEnterFrameHandler);
}
}
if (e.text == 'lookAtCamera') {
for (i=0; i < 9; i++) {
var dir:Vector3D = Matrix3DUtils.getRight(view.camera.transform);
cubeContainer.lookAt(view.camera.position, dir);
}
}

if (e.text == 'clear rotation') {
trace('clear rotation');
cube.rotationX = cube.rotationY = cube.rotationZ = 0;
}
if (e.text == 'x-90') cube.rotationX -= 90;
if (e.text == 'x+90') cube.rotationX += 90;
if (e.text == 'y-90') cube.rotationY -= 90;
if (e.text == 'y+90') cube.rotationY += 90;
if (e.text == 'z-90') cube.rotationZ -= 90;
if (e.text == 'z+90') cube.rotationZ += 90;
trace('cube.rotationX=' + cube.rotationX);
trace('cube.rotationY=' + cube.rotationY);
trace('cube.rotationZ=' + cube.rotationZ);

var m:Matrix3D = cube.transform;

trace('qu= Vector.<Vector3D>([' + m.decompose(Orientation3D.EULER_ANGLES) + ']);' );
}

private function addStrHref(str:String, delimStr:String = ' | '):String {
return "<a href='event:" + str + "'>" + str + "<u></u>"+delimStr;
}

private function enterFrameHandler(e:Event):void {
view.render();
}

public function makeContainer(posX:Number, posY:Number):ObjectContainer3D {
var con:ObjectContainer3D = new ObjectContainer3D();
var c3:ObjectContainer3D = new ObjectContainer3D();
var geometry:Geometry = new Geometry();
var subGeometry:SubGeometry = new SubGeometry();
var s:Number = 100;
var vertexData:Vector.<Number> = Vector.<Number>([s, s, s, s, s, -s,
-s, s, -s, s, s, s, -s, s, -s, -s, s, s, -s, -s, -s, -s, -s, s, -s,
s, s, -s, -s, -s, -s, s, s, -s, s, -s, s, -s, -s, s, -s, s, -s, -s,
-s, s, -s, s, -s, -s, s, -s, -s, -s, s, s, -s, s, s, s, s, -s, -s,
s, s, s, s, -s, s, s, -s, -s, s, s, s, -s, s, s, s, -s, s, -s, s, s,
-s, -s, s, s, -s, s, s, s, -s, s, -s, -s, -s, -s, -s, s, s, -s, -s,
-s, -s, -s, s, -s]);
var uvData:Vector.<Number> = Vector.<Number>([0, 0.5, 1 / 3, 0.5,
1 / 3, 1, 0, 0.5, 1 / 3, 1, 0, 1, 1 / 3, 0.5,
2 / 3, 0.5, 2 / 3, 1, 1 / 3, 0.5, 2 / 3, 1, 1 / 3, 1, 1 / 3,
0, 2 / 3, 0, 1 / 3, 0.5, 2 / 3, 0, 2 / 3, 0.5, 1 / 3, 0.5, 2 / 3, 0.5,
1, 0.5, 2 / 3, 1, 1, 0.5, 1, 1, 2 / 3, 1, 2 / 3, 0, 1, 0, 2 / 3, 0.5,
1, 0, 1, 0.5, 2/3, 0.5, 0, 0, 1/3, 0, 1/3, 0.5, 0, 0, 1/3, 0.5, 0, 0.5]);
var indexData:Vector.<uint> = new Vector.<uint>();
for (var i:int = 0; i < 36; i++) indexData.push(i);


subGeometry.updateVertexData(vertexData);

subGeometry.updateUVData(uvData);

subGeometry.updateIndexData(indexData);

subGeometry.autoDeriveVertexNormals = true;

subGeometry.autoDeriveVertexTangents = true;

geometry.subGeometries.push(subGeometry);

var cM:Mesh = new Mesh(geometry, blaMaterial);

c3.addChild(cM);

con.addChild(c3);
con.position = new Vector3D(posX, 0, posY);
return con;
}

public function mekeBlaMaterial():TextureMaterial {
var s:Sprite = new Sprite();
var sh:Shape = new Shape();

var b:Bitmap;
var e:Number = 128;

s.addChild(makeABitmap('A'));

s.addChild(b = makeABitmap('B'));
b.x = e;

s.addChild(b = makeABitmap('C'));
b.x = e * 2;

s.addChild(b = makeABitmap('D'));
b.y = e;

s.addChild(b = makeABitmap('E'));
b.x = e; b.y = e;

s.addChild(b = makeABitmap('F'));
b.x = e * 2; b.y = e;
s.addChild(sh);
sh.graphics.lineStyle(5, 0xFF8000);
for (var i:int; i < 6; i++) {
sh.graphics.drawRect(i % 3 * e, int(i / 3) * e, e, e);
}
var bmd:BitmapData = new BitmapData(256, 256);
var m:Matrix = new Matrix();
m.scale(1 / 1.5, 1);
bmd.draw(s,m);
return new TextureMaterial(new BitmapTexture(bmd), false, true);
}

public function makeABitmap(str:String = 'A'):Bitmap {
var txt:TextField = new TextField();
txt.htmlText = '<FONT FACE="courier" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"><b>'+str+'</b></FONT></P>';
var tbmd:BitmapData = new BitmapData(128, 128);
var m:Matrix = new Matrix();
m.ty = -4;
m.tx = -2;
m.scale(13, 13);
tbmd.draw(txt,m);
return new Bitmap(tbmd);
}

public function getPerlinBmd():BitmapData {
var s:Number = 512;
var bitmapData:BitmapData = new BitmapData(s, s, true);
var numOctaves:Number = 1;
bitmapData.perlinNoise(25, 52, 1, 1314, false, false, 10, false)
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFFFFFF);
sp.graphics.drawRect(0, 0, s, s);
sp.addChild(new Bitmap(bitmapData));
var resBitmap:BitmapData = new BitmapData(s, s, true);
resBitmap.draw(sp);
return resBitmap;
}

}

}

How to faced cube, create cube, textures, using only actionscript?

It's actually function makeContainer, and if you have to see textures for cube, you can change function mekeBlaMaterial, like this

public function mekeBlaMaterial():TextureMaterial {
var s:Sprite = new Sprite();
var sh:Shape = new Shape();
var b:Bitmap;
var e:Number = 128;
s.addChild(makeABitmap('A'));
s.addChild(b = makeABitmap('B'));
b.x = e;
s.addChild(b = makeABitmap('C'));
b.x = e * 2;
s.addChild(b = makeABitmap('D'));
b.y = e;
s.addChild(b = makeABitmap('E'));
b.x = e; b.y = e;
s.addChild(b = makeABitmap('F'));
b.x = e * 2; b.y = e;
s.addChild(sh);
sh.graphics.lineStyle(5, 0xFF8000);
for (var i:int; i < 6; i++) {
sh.graphics.drawRect(i % 3 * e, int(i / 3) * e, e, e);
}
var bmd:BitmapData = new BitmapData(256, 256);
var m:Matrix = new Matrix();
m.scale(1 / 1.5, 1);
bmd.draw(s, m);
addChild(new Bitmap(bmd));////show my cube textures
return new TextureMaterial(new BitmapTexture(bmd), false, true);
}

And you can see cube textures like this
textures for actionscropt cube

You can download this flash as3 example cube and animation rotation.
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
NB :: Bila Sobat tertarik Ingin membuat software, membeli software, membeli source code, membeli hardware elektronika untuk kepentingan Perusahaan maupun Tugas Akhir (TA/SKRIPSI), Insyaallah Saya siap membantu, untuk Respon Cepat dapat menghubungi kami, melalui :

No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com


atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :

ٱلْحَمْدُ لِلَّهِ رَبِّ ٱلْعَٰلَمِين
Alhamdulilah hirobil alamin

وَ السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
wassalamualaikum warahmatullahi wabarakatuh


Artikel Understanding 3d animation of cube rotations with away3d, actionscript, flash 11., Diterbitkan oleh scodeaplikasi pada Selasa, 02 April 2013. Semoga artikel ini dapat menambah wawasan Anda. Website ini dipost dari beberapa sumber, bisa cek disini sumber, Sobat diperbolehkan mengcopy paste / menyebar luaskan artikel ini, karena segala yang dipost di public adalah milik public. Bila Sobat tertarik Ingin membuat software, membeli software, membeli source code ,Dengan Cara menghubungi saya Ke Email: Fajarudinsidik@gmail.com, atau No Hp/WA : (fajar) : 085369237896, (puat) : 085267792168.

Tawk.to