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

Kekerasan Merusak Benang yang Sulit ,Bukan Menguraikannya

0 komentar
Suatu hari ,angin selatan dan matahari bertikai siapakah yang paling kuat diantara mereka berdua.Lalu mereka bersepakat bahwa yang menang diantara mereka adalah siapa yang dapat menelanjangi seorang musafir dari baju yang dikenakannya.
Angin mencoba pertama kali,tetapi serangannya yang dahsyat hanya dapat menjadikan sang musafir tersebut merapikan bajunya kuat-kuat,dan ketika serangan menjadi lebih dahsyat lagi,suhu yang sedingin-dinginnya ini hanya membuatnya menambah jumlah selimut yang menyelimutinya,dan pada akhirnya angin selatan merasa letiha dan menyerahkan musafir tersebut pada sang matahari.
Pada awalnya matahari mulai menyinari dengan panas yang sedang,sehingga membuat musafir itu melepas penutup kepalanya,tetapi lama-kelamaan ia menyinari semakin panas yang menjadikan musafir itu tidak kuat menahannya,sehingga ia melepas bajunya dan menuju sungai terdekat untuk mandi.





�Basel Syaikhu � Lubang pada Tembok Akal�
Suni

Keputusan Anda untuk Tidak Bertoleransi adalah Keputusan Anda untuk Menderita

0 komentar

Alkisah ,ada seorang laki-laki yang sedang mengujungi salah satu kebun binatang lalu dia membaca tulisan peringatan �Bahaya,Jangan dekati Singa!!� .Tetapi laki-laki itu tidak menghiraukan peringatan tersebut ,malah ia memasukkan tangannya kedalam terali kandang.Tiba-tiba saja ,singa menerkam tangannya ,beruntung ia terluka hanya membutuhkan pengobatan ringan.Kejadian ini membuatnya kaget dan berkata ada dirinya sendiri ,�Kenapa singa itu menerkamku ? Padahal aku orang baik.Aku hanya ingin bermain dengannya dan tidak berfikir bahwa dia akan menyakitiku,tetapi aku telah memaklumi dan melupakan apa yang telah terjadi�Dua bulan telah berlalu ,laki-laki tersebut mengunjungi kebun binatang itu lagi.Dia melihat kandang singa dan memasukkan tangan kedalam kandangnya.Namun kali ini singa menerkam seluruh lengannya.Kemudian laki-laki ini kembali dilarikan ke Rumah sakit dan ia berhasil disembuhkan karena sebuah mukjizat.Setelah 6 bulan berikutnya ,laki-laki ini kembali mengunjungi kebun binatang untuk ketiga kalinya,tetapi dia berdiri di depan kandang singa dan berkata ,�Aku tahu bahwa kamu tidak bermaksud menyakitiku,aku telah memaklumimu.Namun kali ini aku tidak akan lupa�.�Basel Syaikhu � Lubang pada Tembok Akal�
Suni

Export from blender3d to alternativa3d python 3.3 way

0 komentar

How to export mesh from blender3d 2.66 to alternativa3d python way.

Youtube video how-to export mesh from blender3d to alternativa3d.
Very useful python tutorial Tessfaces doc with info best practice blender3d 2.66.

And python script blender3d to alternativa 3d



It's the python script you can made run python script in blender3d.



from decimal import Decimal as D
from mathutils import Vector
import bpy

myObject = bpy.data.objects["Cube"]
exportPathStr = 'D:\\FLEX\\alternativa\\blenderExport\\blender3d\\myBlenderMesh.txt';
mesh = myObject.data;
for v in mesh.vertices:
print(str(v.co.x));

myStr = '';
#ob = bpy.context.active_object
me = mesh
me.calc_tessface()

def verticesToStr(vertice):
outStr = ''
outStr+='%.5f' % vertice.co.x+','
outStr+='%.5f' % vertice.co.y+','
outStr+='%.5f' % vertice.co.z
return outStr

def uvToStr(uv):
outStr = ''
outStr+='%.5f' % uv.x+','
outStr+='%.5f' % uv.y
return outStr

def dellLastSim(myStr):
return myStr[0:len(myStr)-1];

print('START\nSTART\nSTART');
meVerticesStr = ''
for v in me.vertices:
meVerticesStr+=verticesToStr(v)+','
meVerticesStr = meVerticesStr[0:len(meVerticesStr)-1];
#print('meVertices= ['+meVerticesStr+']');

indexStr = '';
uvStr = '';

for f in me.tessfaces:
if len(f.vertices) == 3:
#print("f012", f.vertices[0], f.vertices[1], f.vertices[2])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[1]+",%i"%f.vertices[2]+',';

#print(f.index)
fIndx = f.index
uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv2
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv3
uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)
else:
#print("f012", f.vertices[0], f.vertices[1], f.vertices[2])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[1]+",%i"%f.vertices[2]+',';

uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv2
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv3

uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)
#print("f023", f.vertices[0], f.vertices[2], f.vertices[3])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[2]+",%i"%f.vertices[3]+',';

uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv3
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv4
uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)

indexStr = dellLastSim(indexStr);
uvStr = dellLastSim(uvStr);
#print('meIndex=['+indexStr+'];');
#print('meUvStr=['+uvStr'];');

outFile = open(exportPathStr, 'w');
outFile.write('var meVertices:Array = ['+meVerticesStr+'];\n');
outFile.write('var meIndex:Array = ['+indexStr+'];\n');
outFile.write('var meUv:Array = ['+uvStr+'];\n');
print('PROGRAM EXPORT - OK');
outFile.close();

If your scena has a cube (object mode and you made a texture cube) and you ran this python script, you can see in file D:\\FLEX\\alternativa\\blenderExport\\blender3d\\myBlenderMesh.txt

var meVertices:Array = [1.00000,1.00000,-1.00000,1.00000,-1.00000,-1.00000,-1.00000,-1.00000,-1.00000,-1.00000,1.00000,-1.00000,1.00000,1.00000,1.00000,1.00000,-1.00000,1.00000,-1.00000,-1.00000,1.00000,-1.00000,1.00000,1.00000];
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 = [0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000];

It's a cube data with reset uv coordinates, and you can use this with altanativa 3d like this

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.concurrent.Mutex;
import flash.filters.GlowFilter;

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 flash.utils.*;
import mx.graphics.codec.*;
/**
* ...
* @author Lexcuk
*/
public class Blender3DMesh
{

public function Blender3DMesh()
{

}


public static function makeMeshFromBlender(blenderVertices:Array, blenderIndex:Array, blenderUv:Array, sx:Number = 100, sy:Number = 100, sz:Number = 100, shadow:DirectionalLightShadow = null, blaMaterial:VertexLightTextureMaterial = null, stage3D:Stage3D = null, rotationMatrix:Matrix3D = null):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 = blenderVertices;// [ -0.19641, -0.00000, 0.00000, 0.19641, -0.00000, 0.00000, -0.19641, 1.00000, 0.00000, 0.19641, 1.00000, 0.00000, -0.19641, 0.92388, -0.38268, 0.19641, 0.92388, -0.38268, -0.19641, 0.70711, -0.70711, 0.19641, 0.70711, -0.70711, -0.19641, 0.38268, -0.92388, 0.19641, 0.38268, -0.92388, -0.19641, -0.00000, -1.00000, 0.19641, -0.00000, -1.00000, -0.19641, -0.38268, -0.92388, 0.19641, -0.38268, -0.92388, -0.19641, -0.70711, -0.70711, 0.19641, -0.70711, -0.70711, -0.19641, -0.92388, -0.38268, 0.19641, -0.92388, -0.38268, -0.19641, -1.00000, -0.00000, 0.19641, -1.00000, -0.00000, -0.19641, -0.92388, 0.38268, 0.19641, -0.92388, 0.38268, -0.19641, -0.70711, 0.70711, 0.19641, -0.70711, 0.70711, -0.19641, -0.38268, 0.92388, 0.19641, -0.38268, 0.92388, -0.19641, 0.00000, 1.00000, 0.19641, 0.00000, 1.00000, -0.19641, 0.38268, 0.92388, 0.19641, 0.38268, 0.92388, -0.19641, 0.70711, 0.70711, 0.19641, 0.70711, 0.70711, -0.19641, 0.92388, 0.38268, 0.19641, 0.92388, 0.38268, -0.19641, 1.00000, 0.00000, 0.19641, 1.00000, 0.00000, -0.19641, 0.92388, -0.38268, 0.19641, 0.92388, -0.38268, -0.19641, 0.70711, -0.70711, 0.19641, 0.70711, -0.70711, -0.19641, 0.38268, -0.92388, 0.19641, 0.38268, -0.92388, -0.19641, -0.00000, -1.00000, 0.19641, -0.00000, -1.00000, -0.19641, -0.38268, -0.92388, 0.19641, -0.38268, -0.92388, -0.19641, -0.70711, -0.70711, 0.19641, -0.70711, -0.70711, -0.19641, -0.92388, -0.38268, 0.19641, -0.92388, -0.38268, -0.19641, -1.00000, -0.00000, 0.19641, -1.00000, -0.00000, -0.19641, -0.92388, 0.38268, 0.19641, -0.92388, 0.38268, -0.19641, -0.70711, 0.70711, 0.19641, -0.70711, 0.70711, -0.19641, -0.38268, 0.92388, 0.19641, -0.38268, 0.92388, -0.19641, 0.00000, 1.00000, 0.19641, 0.00000, 1.00000, -0.19641, 0.38268, 0.92388, 0.19641, 0.38268, 0.92388, -0.19641, 0.70711, 0.70711, 0.19641, 0.70711, 0.70711, -0.19641, 0.92388, 0.38268, 0.19641, 0.92388, 0.38268];
var meIndex:Array = blenderIndex;// [0, 2, 4, 1, 5, 3, 0, 4, 6, 1, 7, 5, 0, 6, 8, 1, 9, 7, 0, 8, 10, 1, 11, 9, 0, 10, 12, 1, 13, 11, 0, 12, 14, 1, 15, 13, 0, 14, 16, 1, 17, 15, 0, 16, 18, 1, 19, 17, 0, 18, 20, 1, 21, 19, 0, 20, 22, 1, 23, 21, 0, 22, 24, 1, 25, 23, 0, 24, 26, 1, 27, 25, 0, 26, 28, 1, 29, 27, 0, 28, 30, 1, 31, 29, 0, 30, 32, 1, 33, 31, 0, 32, 2, 1, 3, 33, 34, 35, 37, 34, 37, 36, 36, 37, 39, 36, 39, 38, 38, 39, 41, 38, 41, 40, 40, 41, 43, 40, 43, 42, 42, 43, 45, 42, 45, 44, 44, 45, 47, 44, 47, 46, 46, 47, 49, 46, 49, 48, 48, 49, 51, 48, 51, 50, 50, 51, 53, 50, 53, 52, 52, 53, 55, 52, 55, 54, 54, 55, 57, 54, 57, 56, 56, 57, 59, 56, 59, 58, 58, 59, 61, 58, 61, 60, 60, 61, 63, 60, 63, 62, 62, 63, 65, 62, 65, 64, 64, 65, 35, 64, 35, 34];
var meUv:Array = blenderUv;// [0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079];



meUvFix(meUv);
meshZswapY(meVertices);
meshFixer(meVertices);
if (rotationMatrix != null) rotateByMatrix(meVertices,rotationMatrix);

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 < meIndex.length; i += 3) {
if (sx < 0) {
indexData.push(i + 2);
indexData.push(i + 1);
indexData.push(i + 0);
}
if (sx > 0) {
indexData.push(i + 0);
indexData.push(i + 1);
indexData.push(i + 2);
}
}

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(blaMaterial, 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;
}

private static function meUvFix(uvar:Array):void {
var i:int;
var leng:int = uvar.length;

for (i = 0; i < leng; i+=2) {
uvar[i + 1] *= -1;
}
}

private static function meshMin(vert:Array, p:int=0):Number {
var i:int;
var leng:int = vert.length;
var min:Number = Number.MAX_VALUE;
for (i = 0; i < leng; i+=3) {
if (min > vert[i + p]) min = vert[i + p];
}
return min;
}

private static function rotateByMatrix(vert:Array,rMatrix:Matrix3D):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
var v:Vector3D = new Vector3D(vert[i], vert[i + 1], vert[i + 2]);
v = rMatrix.transformVector(v);
vert[i + 0] = v.x;
vert[i + 1] = v.y;
vert[i + 2] = v.z;
}
}

private static function meshZswapY(vert:Array):void {
var i:int;
var leng:int = vert.length;
var z:Number;
var y:Number;
for (i = 0; i < leng; i+=3) {
z = vert[i + 2];
y = vert[i + 1];

vert[i + 2] = -y;
vert[i + 1] = z;
}
}

private static function meshMax(vert:Array, p:int=0):Number {
var i:int;
var leng:int = vert.length;
var max:Number = Number.MIN_VALUE;
for (i = 0; i < leng; i+=3) {
if (max < vert[i + p]) max = vert[i + p];
}
return max;
}

private static function meshPos(vert:Array, p:int=0, pos:Number = 0):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
vert[i + p] = vert[i + p] + pos;
}

}


private static function meshScale(vert:Array, p:int=0, scale:Number = 0):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
vert[i + p] = vert[i + p] * scale;
}

}

private static function meshFixer(vert:Array):void {
var minX:Number = meshMin(vert, 0);
var maxX:Number = meshMax(vert, 0);
meshPos(vert, 0, -minX);
meshScale(vert, 0, 2 / (maxX - minX));
meshPos(vert, 0, -1);
//meshMerge(vert, 0, 0.7);

var minY:Number = meshMin(vert, 1);
var maxY:Number = meshMax(vert, 1);
meshPos(vert, 1, -minY);
meshScale(vert, 1, 2 / (maxY - minY));
meshPos(vert, 1, -1);

var minZ:Number = meshMin(vert, 2);
var maxZ:Number = meshMax(vert, 2);
meshPos(vert, 2, -minZ);
meshScale(vert, 2, 2 / (maxZ - minZ));
meshPos(vert, 2, -1);
}

}

}

And in your code

private function setupCarBody(sx:Number,sy:Number,sz:Number) : Mesh
{
include '\\blender3d\\myBlenderMesh.txt'


return Blender3DMesh.makeMeshFromBlender(
meVertices,
meIndex,
meUv,
sx, sy, sz, shadow, carMaterial, stage3D);


}


I made an example with car racing, it the previous version alternativa3d cube car and jiglib physics.
Zip contains blend file with car and wheel and FlashDevelop project with export to alternativa 3d.
Suni

Tree Sort c++

0 komentar
TREE SORT


Pengurutan (Sorting) adalah suatu proses pengurutan data yang sebelumnya disusun secara
acak atau tidak teratur menjadi urut dan teratur menurut suatu aturan tertentu.

Dalam melakukan sorting ada banyak metode yang digunakan. tetapi yang akan kami bahas adalah metode sorting dengan tree sort.

    a. Definisi Tree Sort

Tree sort adalah metode sorting dengan cara membangun pohon biner dengan menampilkan 3 hasik output:
PreOrder,InOrder,PostOrder.

    b. Konsep dan Algoritma

Konsep dasar dari tree sort adalah sebagaimana sebuah pohon, ada akar, batang, ranting, daun, dsb. Dalam tree sort ada istilah akar atau root dan daun atau leaf. 

Perhatikan gambar di bawah ini.

ketentuan dari gambar diatas adalah :
1 menjadi akar ,
2 menjadi subtree kiri,
3 menjadi subtree kanan,
4 & 5 menjadi daun dari subtree kiri ,
6 menjadi daun dari subtree kanan.

Setiap objek dalam pohon biner berisi dua pointer, biasanya disebut kiri dan kanan. Selain pointer ini tentu saja node dapat berisi tipe data lainnya. Misalnya, pohon biner integer bisa terdiri dari objek dari jenis berikut:

            struct Node {
               int item; / / Data dalam node ini.
               Node *kiri; / / Pointer ke subtree kiri.
               Node * kanan; / / ??Pointer ke subtree kanan.
            }


 Pointer kiri dan Kanan
dalam Node dapat NULL atau dapat menunjuk ke objek lain dari jenis Node. Sebuah simpul yang menunjuk ke node lain dikatakan induk dari simpul tersebut, dan simpul itu menunjuk disebut anak.  Sebuah binary tree harus memiliki sifat-sifat sebagai berikut:

1. Ada satu buah node yang tidak memiliki node induk. Node ini disebut root atau akar pohon.

2. Setiap node lain dalam pohon memiliki satu induk. Tidak ada loop dalam sebuah binary tree. Artinya tidak mungkin untuk mengikuti rantai pointer yang dimulai di node tertentu dan kembali di node yang sama.

3. Sebuah node yang tidak memiliki anak disebut daun atau leaf. Node daun dapat dikenali dengan cara mengetahui bahwa pointer kiri dan kanan dari sebuah node adalah NULL.

langsung saja bisa memahami algoritmanya lewat coding di bawah ini :


#include "iostream"
#include "conio.h"
using namespace std;

struct Node {
  int item;          //variabel item
   Node *kiri;      //pointer ke subtree kiri
   Node *kanan;     //pointer ke subtree kanan
  };

void tambah(Node **akar,int itembaru)   //berisi pointer yang menunjuk ke pointer akar itu sendiri
  {
   if((*akar) == NULL)            //jika akar kosong maka membuat item baru      
   {
     Node *baru;                        //pointer baru
     baru =newNode;                   //new node = alamat baru
     baru->item = itembaru;   //baru di tunjuk oleh pointer item & di isi dengan item baru
     baru->kiri = NULL;       //baru ditunjuk dengan pointer kiri ,dan jika masihh kosong
     baru->kanan = NULL;  //baru ditunjuk dengan pointer kanan & jika kosong
     (*akar) = baru;         //pointer akar = variabel baru dengan alamat baru
     (*akar)->kiri = NULL;         
     (*akar)->kanan = NULL;        
     cout<<"Item bertambah!";
   }
   else if(itembaru < (*akar)->item)   tambah(&(*akar)->kiri,itembaru);       
// jika item yang ditambah di kiri 

   else if(itembaru > (*akar)->item)   tambah(&(*akar)->kanan,itembaru);       //jika item yang ditambah item ke kanan

   else if(itembaru == (*akar)->item) //jika item yang di input sama dengan item yang ditambah sebelumnya
     cout<<"Item sudah ada!";
  }

void tampil(Node *akar)     //fungsi menampilkan seluruh item yang telah di imput
  {
   if(akar != NULL){
   cout<<akar->item<<" ";      
   tampil(akar->kiri),   //rekursif dengan fungsi tampil dengan mengarah ke kanan
   tampil(akar->kanan);  //rekursif dengan fungsi tampil dengan mengarah ke kanan
  }}
 
void preOrder(Node *akar)       //fungsi cetak preOrder
  {
   if(akar != NULL){
   cout<< akar->item<<"  ";         //cetak item akar
   preOrder(akar->kiri),            //cetak di subtree kiri
   preOrder(akar->kanan);           //cetak di subtree kanan
  }}

void inOrder(Node *akar)        //fungsi cetak inOrder
  {
   if(akar != NULL){
   inOrder(akar->kiri),         //cetak di subtree kiri
   cout<< akar->item<<"  ";     //cetak item akar
   inOrder(akar->kanan);        //cetak di subtree kanan
  }}

void postOrder(Node *akar)      //fungsi cetak postOrder
  {
   if(akar != NULL){
   postOrder(akar->kiri),       //cetak di subtree kiri
   postOrder(akar->kanan);      //cetak di subtree kanan
   cout<< akar->item<<"  ";     //cetak item akar
  }}

main()
{
  int item;
  Node *phn;      //pointer phn untuk menghubungkan dengan link Node
  phn = NULL;     //alamat pointer phn pada NULL
  char pil;

  do {
    system("cls");
    cout<<"\tTREE SORT\n";
    cout<<"1. Tambah\n";
    cout<<"2. Pre-order\n";
    cout<<"3. In-order\n";
    cout<<"4. Post-order\n";
    cout<<"5. Keluar\n";
    cout<<"Silahkan masukkan pilihan anda (1-5)...  ";
    pil=getche();
        if(pil=='1')
        {
          cout<<"\n";
          cout<<"\nItem baru : ";cin>>item;
          tambah(&phn,item);    //fungsi tambah dengan menggunakan alamat pointer phn dengan variabel
        }

if(pil=='2')
        {
        if(phn!=NULL) {       //jika phn tidak kosong
          cout<< "\n-->Item yang masuk : ";tampil (phn);  //cetak item yang masuk
          cout<<"\n-->preOrde  : ";preOrder(phn); //cetak preOrder
          }
        else cout<<"\n-->Masih kosong!";
          getch();
        }

if(pil=='3')
        {
        if(phn!=NULL) {
          cout<< "\n-->Item yang masuk : ";tampil(phn);   //cetak item yang masuk
          cout<<"\n-->inOrder  : ";inOrder (phn); //cetak item inOrder
          }
        else cout<<"\n-->Masih kosong!";
          getch();
        }

if(pil=='4')
        {
        if(phn!=NULL) {
        cout<< "\n-->Item yang masuk : ";tampil (phn);    //cetak item yang masuk
        cout<<"\n-->postOrder  : ";postOrder(phn);        //cetak item postOrder
          }
        else cout<<"\n-->Masih kosong!";
          getch();
        }
        }
          while(pil!='5');
            cout<<"\n";
}


Hasil output:

1.PostOrder


2.InOrder


3.PreOrder






Suni

Alternativa3D jiglib car flash physics and smoke

0 komentar

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.
Suni

Tawk.to