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

away3d 4.0 How i made tire-marks with geometry and jiglib terrain.

0 komentar


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

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

If you'd like, click on flash and drive wasd or arrow keys in demo. How i made tire-marks with geometry in away3d 4.0.

It's almost nice, but shadow from tire marks build on terrarium, and FPS slowly a little.


FD project tire mark away3d 4.0 and terrain - source files

Click on stage and drive the car. Its a tail that is following a box..








package {
import away3d.core.base.Geometry;
import away3d.core.math.Matrix3DUtils;
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.*;

import adobe.utils.CustomActions;

import away3d.cameras.*;import away3d.containers.*;import away3d.entities.*;
import away3d.core.base.SubGeometry;
import away3d.lights.*;import away3d.materials.*;import away3d.materials.lightpickers.*;
import away3d.materials.methods.*;import away3d.primitives.*;import away3d.textures.*;


import jiglib.cof.JConfig;
import jiglib.debug.Stats;
import jiglib.geometry.*;
import jiglib.math.*;
import jiglib.data.*;
import jiglib.physics.RigidBody;
import jiglib.plugin.away3d4.*;
/**
* away3d-core-fp11_4_0_0_beta.swc
* how to make tyre marks?
* I try geometry. It's almost nice.
*/
public class CarAway3d extends Sprite {
[Embed(source="hightmap3.jpg")]
public var TERRIAN_MAP:Class;

private var container:ObjectContainer3D;
private var carBox:Mesh;
private var plane:Mesh;
private var view:View3D;

private var move:Boolean, revers:Boolean, right:Boolean, left:Boolean;
private var carPos:Point = new Point(), carRotation:Number = 0;

private var param:int = 0;


private var steerMarksBmt:BitmapTexture;

private var planeBitmap:BitmapData;

private var count:int = 0;

private var physics:Away3D4Physics;

private var terrain:JTerrain;
private var terrainObjectContainer3D:ObjectContainer3D;

private var lastPos:Vector3D;

private var markLocalA:Vector3D = new Vector3D( -10, 0, 0);//mark
private var markLocalB:Vector3D = new Vector3D( 10, 0, 0);//mark

private var markLastA:Vector3D;
private var markLastB:Vector3D;

private var MARK_LEN:int = 100;

private var material:TextureMaterial;

private var markCount:int;

private var markVertex:Vector.<Number>;

private var markGeometry:Geometry;

public function CarAway3d() {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
init();
}

private function init():void {
view = new View3D(); view.camera.lens.far = 5000;
view.camera.moveTo( -170, 1361, -1221); view.camera.rotateTo(45, 2, 0);
addChild(view);
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 lightPicker:StaticLightPicker = new StaticLightPicker([sunLight]);

var filteredShadowMapMethod:DitheredShadowMapMethod = new DitheredShadowMapMethod(sunLight);

filteredShadowMapMethod.epsilon = 0.005;

material = myMaterial(0xC0C0C0, lightPicker, filteredShadowMapMethod,false);

container.addChild(carBox = new Mesh(new CubeGeometry(100, 50, 200, 1, 1, 1), material));

material = myMaterial(0xFF8040, lightPicker, filteredShadowMapMethod, false);

//trace(n.length);
JConfig.solverType="FAST";
physics = new Away3D4Physics(view, 8);
physics.engine.setCollisionSystem(true, -500, -500, -500, 20, 20, 20, 100, 100, 100);

lastPos = carBox.position.clone();


var terrainBMD:Bitmap = new TERRIAN_MAP();

terrain = physics.createTerrain(material, terrainBMD.bitmapData, 3000, 300, 3000, 50, 50, 300, 0, false);

//terrainObjectContainer3D = view.scene.getChildAt(1);
//view.scene.removeChild(terrainObjectContainer3D);//terrainObjectContainer3D

material = myMaterial(0xFF8040, lightPicker, filteredShadowMapMethod, false);

var basVertexData:Vector.<Number> = Vector.<Number>([ -50, 0, -50, 50, 0, -50, -50, 0, 50, 50, 0, 50]);

var basIndexArr:Vector.<uint> = Vector.<uint>([0, 2, 3, 0, 3, 1]);

var basUVData:Vector.<uint> = Vector.<uint>([0,1,1,1,0,0,1,0]);


var verDataBig:Vector.<Number> = new Vector.<Number>();
var indDataBig:Vector.<uint> = new Vector.<uint>();
var uvDataBig:Vector.<Number> = new Vector.<Number>();

var c:int = 0;
var a:int = 0;
var b:int = 0;

for (var i:int = 0; i < 1000; i++) {
for (var j:int = 0; j < basVertexData.length; j++) {
if (c == 0) verDataBig.push(basVertexData[j] + a * 120-2000);
if (c == 2) verDataBig.push(basVertexData[j] + b * 120-800);
if (c == 1) verDataBig.push(basVertexData[j]);
c++; if (c >= 3) c = 0;
}


a++;
if (a == 30) {
b++;
a = 0;
}


for (j = 0; j < basUVData.length; j++) uvDataBig.push(basUVData[j]);

for (j = 0; j < basIndexArr.length; j++) indDataBig.push(basIndexArr[j]+i*4);
}

//begin IMPORTANT LINE (DEMONSTRATION HOW IT WORKED
for (i = 0; i < verDataBig.length; i++) verDataBig[i] = 0;//try to comment
//end IMPORTANT LINE (DEMONSTRATION HOW IT WORKED

var myGeometry:Geometry = new Geometry();
var sb:SubGeometry = new SubGeometry();
sb.updateVertexData(verDataBig);
sb.updateUVData(uvDataBig);
sb.updateIndexData(indDataBig);
sb.autoDeriveVertexNormals = true;
sb.autoDeriveVertexTangents = true;
myGeometry.subGeometries.push(sb);
var mesh:Mesh = new Mesh(myGeometry, material);
container.addChild(mesh);

markVertex = verDataBig;
markGeometry = myGeometry;
markCount = 0;



stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

private function myMaterial(color:uint, lightPicker:StaticLightPicker, filteredShadowMapMethod:DitheredShadowMapMethod,glos:Boolean = true):* {
var b:BitmapData;
var m:TextureMaterial = new TextureMaterial(new BitmapTexture(b = new BitmapData(256, 256, true,0x00000000)),false, true);
var sp:Sprite = new Sprite(); sp.graphics.lineStyle(20, 0xFF0000);

sp.graphics.beginFill(0xFFFFFF,1);sp.graphics.drawRect(0, 0, 256, 256);sp.graphics.endFill();

sp.graphics.beginFill(0xFFFFFF,1);sp.graphics.drawCircle(130, 160, 30);sp.graphics.endFill();

b.draw(sp);

m.lightPicker = lightPicker;

m.shadowMethod = filteredShadowMapMethod; with (m) { ambient = 0.5; alpha = 0.5; }

if (glos == false) return m;

b = new TERRIAN_MAP().bitmapData; var bm:BitmapData = new BitmapData(256, 256, true, 0x00000000);
bm.copyPixels(b,new Rectangle(10,10,256,256),new Point(10,10));
b = bm; var cubeMap:BitmapCubeTexture = new BitmapCubeTexture(b, b, b, b, b, b);

var fres:FresnelEnvMapMethod = new FresnelEnvMapMethod(cubeMap)
fres.normalReflectance = .3;fres.fresnelPower = .5;
m.addMethod( fres);

return m;
}

private function onEnterFrame(e:Event):void {
var m:Matrix = new Matrix();
if (move) m.translate(0,10); if (revers) m.translate( 0,-10);
if (right) m.rotate(carRotation-=0.1); if (left) m.rotate( carRotation+=0.1);
if (!left && !right) m.rotate(carRotation);
carPos = carPos.add(m.transformPoint(new Point()));
carBox.rotationY = -carRotation * (180 / Math.PI);
var terrainData:TerrainData = terrain.getHeightAndNormalByPoint(new Vector3D(carPos.x, 0, carPos.y));
//trace(terrainData.height);

carBox.x = carPos.x;
carBox.z = carPos.y;
carBox.y = -terrainData.height;

var rV:Vector3D = terrainData.normal.clone();
rV.scaleBy( 1);
rV = rV.add(carBox.position);

var m3d:Matrix3D = new Matrix3D();
m3d.appendTranslation(carPos.x, -terrainData.height, carPos.y);
carBox.transform = m3d;
carBox.lookAt(rV, Vector3D.Z_AXIS);

m3d = carBox.transform.clone();
m3d.prependRotation( -carRotation * (180 / Math.PI), Vector3D.Z_AXIS);
m3d.prependRotation( 180, Vector3D.Z_AXIS);


m3d.prependRotation( 90, Vector3D.X_AXIS);

carBox.transform = m3d;

//set not null
if (markLastA == null) {
markLastA = carBox.transform.transformVector(markLocalA);;
markLastB = carBox.transform.transformVector(markLocalB);
}

//mark action
if (Vector3D.distance(carBox.position, lastPos)>MARK_LEN) {
//mark action
//trace('mark action');
var markCurA:Vector3D = carBox.transform.transformVector(markLocalA);
var markCurB:Vector3D = carBox.transform.transformVector(markLocalB);

var k:Vector.<Number> = markVertex;
var pos:uint = markCount * 12;//markLastA.x;


k[pos] = markLastA.x;//markLastA;
k[pos + 1] = markLastA.y;//markLastA;
k[pos + 2] = markLastA.z;//markLastA;

pos += 3;

k[pos] = markLastB.x;//markLastB;
k[pos + 1] = markLastB.y;//markLastB;
k[pos + 2] = markLastB.z;//markLastB;

pos += 3;

k[pos] = markCurA.x;;
k[pos + 1] = markCurA.y;;
k[pos + 2] = markCurA.z;;

pos += 3;

k[pos] = markCurB.x;;
k[pos + 1] = markCurB.y;;
k[pos + 2] = markCurB.z;;


var cP:Vector3D = carBox.position.clone();
//cP.y -= 30;
lastPos = cP;
markLastA = carBox.transform.transformVector(markLocalA);
markLastB = carBox.transform.transformVector(markLocalB);

markGeometry.subGeometries[0].updateVertexData(k);
markCount++;
if (markCount >= 1000) markCount = 0;
}
view.render();
}


private function keyHandler(e:KeyboardEvent):void {
var k:int = e.keyCode; //w - 87 a - 65 d - 68 s - 83
if (e.type == KeyboardEvent.KEY_DOWN) var t:Boolean = true;
if (k == Keyboard.UP || k == 87) move = t;
if (k == Keyboard.DOWN || k == 83) revers = t;
if (k == Keyboard.RIGHT || k == 68) right = t;
if (k == Keyboard.LEFT || k == 65) left = t;
}

}
}

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 away3d 4.0 How i made tire-marks with geometry and jiglib terrain., Diterbitkan oleh scodeaplikasi pada Minggu, 08 April 2012. 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