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

Alternativa3D jiglib car flash physics and smoke

0 komentar


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

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

Alternativa3D 8.32.0 jiglib car physics racing with textured and shadow cube.

Video alternativa3d and away3d test. Well you know away3d and jiglib and I like to know that is different if last one can be improve with Alternativa3D 8.32.0 Alternativa3D 8.32.0. It's like a "Away3d vs Alternativa3D", then who winer? Well I don't know, they both are awesome. I have already taken current Jiglibflash update for Away3D 4.1 alpha dev branch (stage3d) and hello word alternativa3d example.

If you want to drive, you can made a click on flash container and drive a car using arrow key and space key for handbrake.

package {

import alternativa.engine3d.controllers.*;import alternativa.engine3d.core.*;
import alternativa.engine3d.lights.*;import alternativa.engine3d.materials.*;
import alternativa.engine3d.primitives.*;import alternativa.engine3d.resources.*;
import alternativa.engine3d.shadows.*;import alternativa.engine3d.loaders.*;
import alternativa.engine3d.objects.*;import alternativa.engine3d.core.*;
import alternativa.protocol.codec.primitive.*;

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


import jiglib.cof.*; import jiglib.debug.*;import jiglib.geometry.*; import jiglib.math.*;
import jiglib.data.*;import jiglib.physics.*;import jiglib.plugin.away3d4.*;
import jiglib.plugin.*;
import jiglib.vehicles.*;

/**
* Alternativa3D 8.32.0 13.05.2013 0:23 "Hello world + shadow + box + jiglib 3d physics!"
*/

public class HelloAlternativa3D extends Sprite {
private var rootContainer:Object3D = new Object3D();
private var camera:Camera3D;
private var stage3D:Stage3D;
private var box:Mesh;
private var material:TextureMaterial;

private var spriteSmoke:Sprite3dSmoke;

private var physics:AbstractPhysics;

private var blaMaterial:VertexLightTextureMaterial;

private var shadow:DirectionalLightShadow;

private var carBody:JCar;

private var steerFL:*;
private var steerFR:*;
private var wheelFL:*;
private var wheelFR:*;
private var wheelBL:*;
private var wheelBR:*;

private var carContainer:Object3D;
private var smokePosContainer:Object3D;

private var hrefTxt:TextField;

public function HelloAlternativa3D() {

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

stage3D = stage.stage3Ds[0];
stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
stage3D.requestContext3D();


}

private function onContextCreate(e:Event):void {

var bitmapCubeResource:BitmapTextureResource
= new BitmapTextureResource(makeBlaBmd());

var planeResource:BitmapTextureResource
= new BitmapTextureResource(getPerlinBmd());

var smokeBitmapTextureResource:BitmapTextureResource =
new BitmapTextureResource(Sprite3dSmoke.makeSmokePuffBmd(0xFF80FF));

var grass_diffuse:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFF0000));

var grass_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFFFFFF));

var box_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFFFFFF));


bitmapCubeResource.upload(stage3D.context3D);
smokeBitmapTextureResource.upload(stage3D.context3D);
grass_diffuse.upload(stage3D.context3D);
grass_normal.upload(stage3D.context3D);
box_normal.upload(stage3D.context3D);

// Camera and view
camera = new Camera3D(0.1, 10000);
camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0, 0, 4);
addChild(camera.view);
addChild(camera.diagram);

// Initial position
camera.setPosition(350, 700, 0);
camera.lookAt(0, 0, 0);
camera.rotationY = Math.PI / 2;
rootContainer.addChild(camera);

// Light sources
var ambientLight:AmbientLight = new AmbientLight(0x333333);
ambientLight.intensity = 3;

ambientLight.z = 200;
ambientLight.y = -200;
ambientLight.x = 200;

rootContainer.addChild(ambientLight);

var directionalLight:DirectionalLight = new DirectionalLight(0xFFFF99);

directionalLight.z = 20000;
directionalLight.y = 20000;
directionalLight.x = 20000;

directionalLight.intensity = 1;

//directionalLight.lookAt(2000, 0, 0);
directionalLight.lookAt(0, 0, 0);

rootContainer.addChild(directionalLight);


blaMaterial = new VertexLightTextureMaterial(bitmapCubeResource, box_normal, 1);
//var material:TextureMaterial = new TextureMaterial(grass_normal, box_normal, 1);


//var rgBody:RigidBody = physics.addBody((bgMaterial,1000,1000,1,1,true);
var plObj:Object3D = new Object3D();

var plane:Plane = new Plane(1000, 1000);
plane.rotationX = Math.PI / 2;
var planeMaterial:StandardMaterial =
new StandardMaterial(planeResource, grass_normal);

plane.setMaterialToAllSurfaces(planeMaterial);
plObj.addChild(plane);
rootContainer.addChild(plObj);



var smokeMaterial:StandardMaterial =
new StandardMaterial(smokeBitmapTextureResource, box_normal);

smokeMaterial.alpha = 0.7;
smokeMaterial.alphaThreshold = 1;
smokeMaterial.lightMap = grass_diffuse;


spriteSmoke = new Sprite3dSmoke(rootContainer, 30, 20, 3, 2, smokeMaterial);


// Shadow
shadow = new DirectionalLightShadow(1000, 1000, -500, 500, 512, 2);
shadow.biasMultiplier = 0.97;
//shadow.addCaster(plane);
//shadow.addCaster(box);
directionalLight.shadow = shadow;




for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}

physics = new AbstractPhysics(6);
var jGround:JPlane =
new JPlane(new Alternativa3DSkinObject(plObj), new Vector3D(0, 1, 0));

jGround.y = 0;
jGround.movable = false;
physics.addBody(jGround);

createBox();
createCar();

addChild(hrefTxt = new TextField());
with (hrefTxt) { border = background = true; selectable = false;
x = 150; scaleX = scaleY = 1.4; backgroundColor = 0xFFFFFF; }
hrefTxt.autoSize = TextFieldAutoSize.LEFT;
var htmStr:String = '';
htmStr = addStrHref('camA') + addStrHref('camB')
+ addStrHref('camC');


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

// Listeners
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
}

private function onEnterFrame(e:Event):void {
var carContainerPosition:Vector3D =
new Vector3D(carContainer.x, carContainer.y, carContainer.z);

physics.engine.integrate(0.12);

updateWheelSkin();


var pos:Vector3D =
new Vector3D(smokePosContainer.x, smokePosContainer.y, smokePosContainer.z)

pos = carContainer.matrix.transformVector(pos);


if (carBody.chassis.getVelocity(carContainerPosition).length > 50)
spriteSmoke.update(pos,rootContainer);
else spriteSmoke.updateAndDelete(pos);


// Width and height of view
//camera.view.width = stage.stageWidth;
//camera.view.height = stage.stageHeight;

// Render
camera.render(stage3D);
}

private function keyDownHandler(event:KeyboardEvent) : void
{

switch(event.keyCode)
{
case Keyboard.UP:
case 87:
{
carBody.setAccelerate(1);
break;
}
case Keyboard.DOWN:
case 83:
{
carBody.setAccelerate(-1);
break;
}
case Keyboard.LEFT:
case 65:
{
carBody.setSteer(["WheelFL", "WheelFR"], -1);
break;
}
case Keyboard.RIGHT:
case 68:
{
carBody.setSteer(["WheelFL", "WheelFR"], 1);
break;
}
case Keyboard.SPACE:
{
carBody.setHBrake(1);
break;
}
default:
{
break;
}
}
}


private function keyUpHandler(event:KeyboardEvent) : void
{
trace(event.keyCode);
switch(event.keyCode)
{
case Keyboard.UP:
case 87:
{
carBody.setAccelerate(0);
break;
}
case Keyboard.DOWN:
case 83:
{
carBody.setAccelerate(0);
break;
}
case Keyboard.LEFT:
case 65:
{
carBody.setSteer(["WheelFL", "WheelFR"], 0);
break;
}
case Keyboard.RIGHT:
case 68:
{
carBody.setSteer(["WheelFL", "WheelFR"], 0);
break;
}
case Keyboard.SPACE:
{
carBody.setHBrake(0);
}
default:
{
break;
}
}
return;
}

private function createCar() : void {
carContainer = new Object3D();
rootContainer.addChild(carContainer);

carContainer.addChild(makeCube(40, 20, 90));
carContainer.addChild(smokePosContainer = new Object3D());
position(smokePosContainer, new Vector3D( -0, -10, -50));

var oWheelFR:Object3D = new Object3D();
var oWheelFL:Object3D = new Object3D();

var oWheelFR_PIVOT:Object3D = new Object3D();
var oWheelFL_PIVOT:Object3D = new Object3D();

var oWheelBR:Object3D = new Object3D();
var oWheelBL:Object3D = new Object3D();

var oWheelBR_PIVOT:Object3D = new Object3D();
var oWheelBL_PIVOT:Object3D = new Object3D();

carContainer.addChild(oWheelFR);
oWheelFR.addChild(oWheelFR_PIVOT)
oWheelFR_PIVOT.addChild(setupWheel());

carContainer.addChild(oWheelFL);
oWheelFL.addChild(oWheelFL_PIVOT);
oWheelFL_PIVOT.addChild(setupWheel());

carContainer.addChild(oWheelBR);
oWheelBR.addChild(oWheelBR_PIVOT)
var w:Mesh;
oWheelBR_PIVOT.addChild(w = setupWheel());

carContainer.addChild(oWheelBL);

oWheelBL.addChild(oWheelBL_PIVOT);
oWheelBL_PIVOT.addChild(w = setupWheel());

oWheelFR.name = "WheelFR";
position(oWheelFR, new Vector3D(20, -10, 25));

oWheelFR_PIVOT.name = "WheelFR_PIVOT";

oWheelFL.name = "WheelFL";
position(oWheelFL, new Vector3D(-20, -10, 25));

oWheelFL_PIVOT.name = "WheelFL_PIVOT";
oWheelBR.name = "WheelBR";


position(oWheelBR, new Vector3D(20, -10, -25));
oWheelBR_PIVOT.name = "WheelBR_PIVOT";

oWheelBL.name = "WheelBL";
position(oWheelBL, new Vector3D(-20, -10, -25));
oWheelBL_PIVOT.name = "WheelBL_PIVOT";

carBody = new JCar(new Alternativa3DSkinObject(carContainer));

carBody.setCar(40, 5, 500);
carBody.chassis.moveTo(new Vector3D(200, 0, 0));
carBody.chassis.rotationY = 90;
carBody.chassis.mass = 9;
carBody.chassis.sideLengths = new Vector3D(40, 20, 90);
physics.addBody(carBody.chassis);

carBody.setupWheel("WheelFL", new Vector3D(-20, -10, 25), 1.2, 1.5, 3, 8, 0.4, 0.5, 2);
carBody.setupWheel("WheelFR", new Vector3D(20, -10, 25), 1.2, 1.5, 3, 8, 0.4, 0.5, 2);
carBody.setupWheel("WheelBL", new Vector3D(-20, -10, -25), 1.2, 1.5, 3, 8, 0.4, 0.5, 2);
carBody.setupWheel("WheelBR", new Vector3D(20, -10, -25), 1.2, 1.5, 3, 8, 0.4, 0.5, 2);

steerFL = oGetChildByName(carContainer, "WheelFL");
steerFR = oGetChildByName(carContainer, "WheelFR");
wheelFL = oGetChildByName(carContainer, "WheelFL_PIVOT");
wheelFR = oGetChildByName(carContainer, "WheelFR_PIVOT");
wheelBL = oGetChildByName(carContainer, "WheelBL");
wheelBR = oGetChildByName(carContainer, "WheelBR");
}

private function position(o:*, v:Vector3D):void {
o.x = v.x;
o.y = v.y;
o.z = v.z;
}

private function updateWheelSkin() : void
{
/*
carContainer.matrix =
JMatrix3D.getAppendMatrix3D(carBody.chassis.currentState.orientation,
JMatrix3D.getTranslationMatrix(carBody.chassis.currentState.position.x,
carBody.chassis.currentState.position.y, carBody.chassis.currentState.position.z));
*/


steerFL.rotationY = carBody.wheels["WheelFL"].getSteerAngle()*Math.PI/180;
steerFR.rotationY = carBody.wheels["WheelFR"].getSteerAngle()*Math.PI/180;

//wheelFL.pitch(carBody.wheels["WheelFL"].getRollAngle());
wheelFL.rotationX += carBody.wheels["WheelFL"].getRollAngle()*Math.PI/180;

//wheelFR.pitch(carBody.wheels["WheelFR"].getRollAngle());
wheelFR.rotationX += carBody.wheels["WheelFR"].getRollAngle()*Math.PI/180;

//wheelBL.roll(carBody.wheels["WheelBL"].getRollAngle());
wheelBL.rotationX += carBody.wheels["WheelBL"].getRollAngle()*Math.PI/180;

//wheelBR.roll(carBody.wheels["WheelBR"].getRollAngle());
wheelBR.rotationX += carBody.wheels["WheelBR"].getRollAngle()*Math.PI/180;

steerFL.y = carBody.wheels["WheelFL"].getActualPos().y;
steerFR.y = carBody.wheels["WheelFR"].getActualPos().y;
wheelBL.y = carBody.wheels["WheelBL"].getActualPos().y;
wheelBR.y = carBody.wheels["WheelBR"].getActualPos().y;

}

private function oGetChildByName(o:Object3D, name:String):*{
var o1:*;
var o2:*;
for (var i:int = 0; i < o.numChildren; i++) {
o1 = o.getChildAt(i);
trace(o1.name);
if (o1.name == name) return o1;
for (var j:int = 0; j < o1.numChildren; j++) {
o2 = o1.getChildAt(j);
if (o2.name == name) return o2;
}
}
return null;
}

private function setupWheel() : Mesh
{
return makeCube(10,20,20);
}

private function createBox() : void
{
var i:int;
while (i < 4)
{
var box:Mesh = makeCube(100, 100, 100);
box.z = 100;

rootContainer.addChild(box);

var jBox:JBox = new JBox(new Alternativa3DSkinObject(box), 100, 100, 100);
physics.addBody(jBox);

jBox.y = 102 * (i+1);
i++;
}
}

private function txtNavHandler(e:TextEvent):void {
if (e.text == 'camA') {
camera.setPosition(0, 2000, 0);
camera.lookAt(0, 0, 0);
camera.rotationY = Math.PI / 2;
}

if (e.text == 'camB') {
camera.setPosition(350, 700, 0);
camera.lookAt(0, 0, 0);
camera.rotationY = Math.PI / 2;
}

if (e.text == 'camC') {
camera.setPosition(-568, 128, 75);
camera.lookAt(0, 0, 0);
camera.rotationY = -Math.PI / 2;
}

}

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

private function makeCube(sx:Number = 100, sy:Number = 100, sz:Number = 100):Mesh {
var mesh:Mesh = new Mesh();
var attributes:Array = [
VertexAttributes.POSITION,
VertexAttributes.POSITION,
VertexAttributes.POSITION,
VertexAttributes.TEXCOORDS[0],
VertexAttributes.TEXCOORDS[0],
VertexAttributes.NORMAL,
VertexAttributes.NORMAL,
VertexAttributes.NORMAL,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4
];

var meVertices:Array = [1,1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,1,1,1,1,-1,1,-1,-1,1,-1,1,1];
var meIndex:Array = [0,1,2,0,2,3,4,7,6,4,6,5,0,4,5,0,5,1,1,5,6,1,6,2,2,6,7,2,7,3,4,0,3,4,3,7];
var meUv:Array = [1, 0, 2 / 3, 0, 2 / 3, 0.5, 1, 0, 2 / 3, 0.5, 1, 0.5, 1 / 3, 0, 0, 0, 0, 0.5,
1 / 3, 0, 0, 0.5, 1 / 3, 0.5, 1 / 3, 0.5, 0, 0.5, 0, 1, 1 / 3, 0.5, 0, 1, 1 / 3, 1, 2 / 3, 0,
1 / 3, 0, 1 / 3, 0.5, 2 / 3, 0, 1 / 3, 0.5, 2 / 3, 0.5, 2 / 3, 0.5, 1 / 3, 0.5, 1 / 3, 1,
2 / 3, 0.5, 1 / 3, 1, 2 / 3, 1, 1, 0.5, 2 / 3, 0.5, 2 / 3, 1, 1, 0.5, 2 / 3, 1, 1, 1];
var mv:Array = [];
var mUv:Array = [];
var i:int;
for (i = 0; i < meIndex.length; i++) {
//mUv.push(meUv[meIndex[i] * 2 + 0], meUv[meIndex[i] * 2 + 1]);
mUv.push(meUv[i * 2 + 0], meUv[i * 2 + 1]);
mv.push(meVertices[meIndex[i] * 3 + 0], meVertices[meIndex[i] * 3 + 1], meVertices[meIndex[i] * 3 + 2]);
}

for (i = 0; i < mv.length; i+=3) {
mv[i + 0] *= sx/2;
mv[i + 1] *= sy/2;
mv[i + 2] *= sz/2;
}

var indexData:Vector.<uint> = new Vector.<uint>();
for (i = 0; i < 36; i++) indexData.push(i);

var vertices:Vector.<Number> = Vector.<Number>(mv);
var indexes:Vector.<uint> = indexData;
var uvs:Vector.<Number> = Vector.<Number>(mUv);


//trace(vertices.length + " " + segments * 3)
mesh.geometry = new Geometry();
mesh.geometry.numVertices = vertices.length/3;
mesh.geometry.indices = indexes;
mesh.geometry.addVertexStream(attributes);
mesh.geometry.setAttributeValues(VertexAttributes.POSITION, vertices);
mesh.geometry.setAttributeValues(VertexAttributes.TEXCOORDS[0], uvs);
//mesh.geometry.setAttributeValues(VertexAttributes.TANGENT4, tangent);
//mesh.geometry.setAttributeValues(VertexAttributes.NORMAL, normals);
mesh.geometry.calculateTangents(0);
mesh.geometry.calculateNormals();

mesh.addSurface(material, 0, indexes.length / 3);

mesh.geometry.upload(stage3D.context3D);

mesh.calculateBoundBox();
//mesh.setMaterialToAllSurfaces(material);
//stage3D.context3D.setCulling(Context3DTriangleFace.FRONT_AND_BACK);
//cameraContainer.rotationZ = -Math.PI/2;

shadow.addCaster(mesh);
mesh.setMaterialToAllSurfaces(blaMaterial);
return mesh;
}

public function makeBlaBmd():BitmapData {
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(24, 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 bmd;
}

public function makeABitmap(str:String = 'A'):Bitmap {
var txt:TextField = new TextField();
txt.htmlText =
'<FONT FACE="courier" SIZE="12" COLOR="0" 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;
}

}
}


It's zip alternativa3d and jiglib flash physics.
I made new tutorial How to made export with blender3d to alternativa3d using python.
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 Alternativa3D jiglib car flash physics and smoke, Diterbitkan oleh scodeaplikasi pada Minggu, 12 Mei 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