export ASE to B3D

Blitz3D Forums/Blitz3D Programming/export ASE to B3D

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Support Reflect map and Bug fix

;=====================================================================
;----------------------------------------------------------------
; Vincenzo Caldarulo
; nickname : VinsentX
; e-mail: enzo_light@...
; main Programmer V&D Software Multimedia
;----------------------------------------------------------------
;=====================================================================
;****************************
;-------------------------
; 3DMax Ase export to B3D
; Support Converter:
;
; - Default Map
; - Light Map
; - Reflect Map
;-------------------------
;****************************
;
Include "b3dfile.bb"

Graphics3D 640,480,16,2
SetBuffer BackBuffer()

;===>
Const Simb1 = 32 ; 32 = ASC(" ")
const Simb2 = 125; 125 = ASC("}")

const ArrDim = 200000
const ArrMat = 99
;===>
global Obj_name$
global XYZ_Count_vertex
global XYZ_Count_face
global XYZ_px#, XYZ_py#, XYZ_pz#
global XYZ_ax#, XYZ_ay#, XYZ_az#, XYZ_aw#
global XYZ_sx#, XYZ_sy#, XYZ_sz#
global UVW_Count_vertex
global UVW_Count_face
global UVW_Count_vertex1
global UVW_Count_face1
global UVW_OffU0# = 1
Global UVW_OffV0# = 1
Global UVW_OffU1# = 1
Global UVW_OffV1# = 1
Global UVW_OffU2# = 1
Global UVW_OffV2# = 1
Global UVW_TileU0# = 1
global UVW_TileV0# = 1
global UVW_TileU1# = 1
global UVW_TileV1# = 1
global UVW_TileU2# = 1
global UVW_TileV2# = 1
global UVW_for_XYZ
;===>
dim XYZ_vertex#(ArrDim,3)
dim XYZ_normal#(ArrDim,3)
dim XYZ_face(ArrDim,3)
dim UVW_vertex#(ArrDim,3)
dim UVW_face(ArrDim,3)
dim UVW_vertex1#(ArrDim,3)
dim UVW_face1(ArrDim,3)
;===>
global MAT_Count;
;===>
dim MatName$(ArrMat) ; nome materiale
dim MatTex0$(ArrMat) ; nome texture default
dim MatTex1$(ArrMat) ; nome texture lightmap
dim MatTex2$(ArrMat) ; nome texture EnvMap
dim MatR#(ArrMat) ; color R
dim MatG#(ArrMat) ; color G
dim MatB#(ArrMat) ; color B
dim MatA#(ArrMat) ; Opacity
dim MatShine#(ArrMat) ; Shininess
;===>


;===>
;Convert_Ase_B3d("obj.ASE","Viewer V&D\gfx\Obj.B3D")
Text 0,00,"Inizio esportazione"
Flip

global time1 = millisecs()
Convert_Ase_B3d("obj.ASE","Obj.B3D")
global time2 = millisecs()

Global ObjExp = loadmesh("obj.b3d");

Text 0,10,"Esportazione avvenuta con successo"
;=====================================================================
;=====================================================================
; -------------------------------
; Creation de la caméra
; -------------------------------
Global Mouse_X_Speed#
Global Mouse_Y_Speed#
Global Camera
Global Camera_VelX#
Global Camera_VelZ#
Global Camera_Pitch#
Global Camera_Yaw#

Camera=CreateCamera()
rotateentity camera,0,0,0
;PositionEntity camera,290,-600,2380 ; da inc a metri x100
PositionEntity camera,0,0,0 ; da inc a metri x100
CameraRange camera,0.1,10000
;formula del fov camera Zoom =Sqrt(Fov)
;CameraZoom camera, sqr(50) ; 1 = 10 di fov // 7.5 = 50 di fov
CameraZoom camera, 1 ; 1 = 10 di fov // 7.5 = 50 di fov
; -------------------------------
; Chargement de l'objet
; -------------------------------
;ObjExp=LoadMesh( "Obj.b3d" )
;ObjExp=LoadAnimMesh( "Obj.b3d" )
;Animate ObjExp, 1
RotateEntity ObjExp,0,0,0
PositionEntity ObjExp,0,0,0
EntityShininess ObjExp,1
PointEntity Camera,ObjExp

temp = createsphere(8)
entityalpha temp,0.5
Dither True

LightCA = 255
AmbientLight LightCA, LightCA, LightCA

font=LoadFont( "Arial",20 )
SetFont font
;===>
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
;rotateentity camera,-2.7,178,180
While KeyDown(1)=0
Procedure_Freelook(1.05,0.2)
updateworld()
RenderWorld()
Text 0,0,"Esportazione avvenuta con successo"
text 0,15,"px:"+entityx(Camera)+"py:"+entityy(Camera)+"pz:"+entityz(Camera)
text 0,30,"rx:"+entitypitch(Camera)+"ry:"+entityyaw(Camera)+"rz:"+entityroll(Camera)
text 0,45,"Time to export"
text 0,60,"Millisecs "+(time2-time1)+" secs "+((time2-time1)/1000)
Flip
Wend
End
; -------------------------
; Fonction Freelook
; -------------------------
Function Procedure_Freelook(Velocity#,Speed#)
AngMax = 89
Mouse_X_Speed=MouseXSpeed()*0.5
Mouse_Y_Speed=MouseYSpeed()*0.5

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
Camera_Pitch=Camera_Pitch+Mouse_Y_Speed
Camera_Yaw=Camera_Yaw-Mouse_X_Speed

If Camera_Pitch<-AngMax Then Camera_Pitch=-AngMax
If Camera_Pitch>AngMax Then Camera_Pitch=AngMax

RotateEntity camera,Camera_Pitch,Camera_Yaw,0

If KeyDown(Key_ArrowPad_Left) Camera_VelX=Camera_VelX-Speed# ElseIf KeyDown(Key_ArrowPad_Right) Camera_VelX=Camera_VelX+Speed#
; If KeyDown(Key_ArrowPad_Down) Camera_VelZ=Camera_VelZ-Speed# ElseIf KeyDown(Key_ArrowPad_Up) Camera_VelZ=Camera_VelZ+Speed#
If MouseDown(2) Camera_VelZ=Camera_VelZ-Speed# ElseIf MouseDown(1) Camera_VelZ=Camera_VelZ+Speed#

Camera_VelX=Camera_VelX/Velocity#
Camera_VelZ=Camera_VelZ/Velocity#
MoveEntity camera,Camera_VelX,0,Camera_VelZ
End Function
;=====================================================================
;=====================================================================


;===============================
;---------------------------
; Scrittura stringa
;---------------------------
Function ReadStringN$(f,sep$)
s$ = "";
SepVal = Asc(sep$)

While Not Eof(f)
let = ReadByte(f);

if (let = SepVal and s$ <> "")
return s
else
if ((let >= Simb1) and (let <= Simb2) and (let <> SepVal) and (let <> 34)); the code 34 = " from ascii table
s$ = s$ + Chr(let)
else
if (s$ <> "") return s
end if
end if
Wend
End Function

Function EstractName$(str_nome$)
s$ = ""
lun = len(str_nome)
;===>
For xc = lun To 1 Step -1
s$ = mid(str_nome,xc,1)
If ((s$ = "\") Or (xc=1))
s$ = mid(str_nome,xc+1,lun-xc);
exit
end if
next
;===>
return s$
;===>
end function

;---------------------------
; Scrittura stringa
;---------------------------
Function Convert_Ase_B3d(LoadFile$,SaveFile$)
;stop
infile = OpenFile(LoadFile$)
outfile = Writefile(SaveFile$)
WriteBB3D( outfile, "Init" )
StateMesh = 0 ; 1 = Init Root Object
While Not Eof(infile)
;===>
Obj_name$ = ""
XYZ_Count_vertex = 0
XYZ_Count_face = 0
UVW_Count_vertex = 0
UVW_Count_face = 0
UVW_Count_vertex1 = 0
UVW_Count_face1 = 0
;===>
StateLoad = LoadAse(infile)
;===>
if ((StateLoad = 1) and (StateMesh = 0))
WriteBB3D( outfile, "Material" )
end if
;===>
if (StateLoad = 2)
;===>
if (stateMesh = 0) ; Open Root Object
StateMesh = 1
b3dBeginChunk( "NODE" );------------root node
b3dWriteString( "root");name
b3dWriteFloat( 0 ) ;x_pos
b3dWriteFloat( 0 ) ;y_pos
b3dWriteFloat( 0 ) ;y_pos
b3dWriteFloat( 1 ) ;x_scale
b3dWriteFloat( 1 ) ;y_scale
b3dWriteFloat( 1 ) ;z_scale
b3dWriteFloat( 1 ) ;rot_w
b3dWriteFloat( 0 ) ;rot_x
b3dWriteFloat( 0 ) ;rot_y
b3dWriteFloat( 0 ) ;rot_z
end if
;===>
WriteBB3D( outfile, "Mesh" )
end if
;===>
Wend
;===>
if (stateMesh = 1) ; Close Root Object
b3dEndChunk() ;end of NODE chunk
end if
;===>
WriteBB3D( outfile, "End" )

CloseFile infile
CloseFile outfile
end function

;---------------------------
; Scrittura stringa
;---------------------------
Function LoadAse(ASE)

OpenP = 0
While Not Eof(ASE)
chunk$ = ReadStringN(ASE," ")
;===>
if (chunk$ = "*GEOMOBJECT") then
;stop
While Not Eof(ASE)
cluster$ = ReadStringN(ASE," ")
;===>
if (cluster$ = "{")
OpenP = OpenP+1
end if
if (cluster$ = "}") then
OpenP = OpenP-1
end if
if (OpenP <= 0)
if (XYZ_Count_vertex>2)
return 2
else
return 0
end if
end if
;===>
if (cluster$ = "*NODE_NAME") then
Obj_name$ = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*TM_POS") then
XYZ_px = ReadStringN(ASE," ")
XYZ_py = ReadStringN(ASE," ")
XYZ_pz = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*TM_ROTAXIS") then
XYZ_rx = ReadStringN(ASE," ")
XYZ_ry = ReadStringN(ASE," ")
XYZ_rz = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*TM_ROTANGLE") then
XYZ_rw = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*TM_SCALE") then
XYZ_sx = ReadStringN(ASE," ")
XYZ_sy = ReadStringN(ASE," ")
XYZ_sz = ReadStringN(ASE," ")
end if
;===>
if cluster$ = "*MATERIAL_REF" then
UVW_for_XYZ = ReadStringN(ASE," ")
end if

;===>
if (cluster$ = "*MESH") then
While Not Eof(ASE)
cluster1$ = ReadStringN(ASE," ")
;===>
if (cluster1$="}") exit
;===>
if (cluster1$ = "*MESH_NUMVERTEX") then
XYZ_Count_vertex = ReadStringN(ASE," ")
end if
;===>
if (cluster1$ = "*MESH_NUMFACES") then
XYZ_Count_face = ReadStringN(ASE," ")
end if
;===>
if (cluster1$ = "*MESH_VERTEX_LIST") then
MESH_VERTEX_LIST(ASE)
end if
;===>
if (cluster1$ = "*MESH_FACE_LIST") then
MESH_FACE_LIST(ASE)
end if
;===>
if cluster1$ = "*MESH_NUMTVERTEX" then
UVW_Count_vertex = ReadStringN(ASE," ")
end if
;===>
if cluster1$ = "*MESH_TVERTLIST" then
MESH_TVERTLIST(ASE)
end if
;===>
if cluster1$ = "*MESH_NUMTVFACES" then
UVW_Count_face = ReadStringN(ASE," ")
end if
;===>
if cluster1$ = "*MESH_TFACELIST" then
MESH_TFACELIST(ASE)
end if
;===>
if cluster1$ = "*MESH_MAPPINGCHANNEL" then
While Not Eof(ASE)
chunk1$ = ReadStringN(ASE," ")
;===>
if (chunk1$="}") exit
;===>
if chunk1$ = "*MESH_NUMTVERTEX" then
UVW_Count_vertex1 = ReadStringN(ASE,"")
end if
;===>
if chunk1$ = "*MESH_TVERTLIST" then
MESH_TVERTLIST1(ASE)
end if
;===>
if chunk1$ = "*MESH_NUMTVFACES" then
UVW_Count_face1 = ReadStringN(ASE," ")
end if
;===>
if chunk1$ = "*MESH_TFACELIST" then
MESH_TFACELIST1(ASE)
end if
;===>
wend
end if
;===>
if (cluster1$ = "*MESH_NORMALS") then
MESH_NORMALS(ASE)
end if
;===>
wend
end if
;===>
wend
end if
;===>
; Chunck *MATERIAL_LIST
if chunk$ = "*MATERIAL_LIST" then
OpenP = 0
Id_mat = 0
While Not Eof(ASE)
cluster$ = ReadStringN(ASE," ")
;===>
if (cluster$ = "{")
OpenP = OpenP+1
end if
if (cluster$ = "}") then
OpenP = OpenP-1
end if
if (OpenP <= 0)
if (MAT_Count=>0)
return 1
else
return 0
end if
end if
;===>
if (cluster$ = "*MATERIAL_COUNT") then
cnt = ReadStringN(ASE," ")
MAT_Count = cnt-1
end if
;===>
if (cluster$ = "*MATERIAL") then
Id_mat = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*MATERIAL_NAME") then
MatName$(Id_mat) = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*MATERIAL_DIFFUSE") then
MatR(Id_mat) = ReadStringN(ASE," ")
MatG(Id_mat) = ReadStringN(ASE," ")
MatB(Id_mat) = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*MATERIAL_SHINE") then
MatShine(Id_mat) = ReadStringN(ASE," ")
end if
;===>
if (cluster$ = "*MATERIAL_TRANSPARENCY") then
val# = ReadStringN(ASE," ")
MatA(Id_mat) = 1.0-val
end if
;===>
if (cluster$ = "*MAP_DIFFUSE") then
While Not Eof(ASE)
cluster1$ = ReadStringN(ASE," ")
if (cluster1$="}") exit
if (cluster1$="*BITMAP")
name$ = ReadStringN(ASE,"")
MatTex0$(Id_mat) = EstractName$(name$);
end if
if (cluster1$="*UVW_U_OFFSET")
UVW_OffU0# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_V_OFFSET")
UVW_OffV0# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_U_TILING")
ut# = ReadStringN(ASE,"")
UVW_TileU0# = 1.0/ut#;
end if
if (cluster1$="*UVW_V_TILING")
vt# = ReadStringN(ASE,"")
UVW_TileV0# = 1.0/vt#;
end if
Wend
end if
;===>
if (cluster$ = "*MAP_SELFILLUM") then
While Not Eof(ASE)
cluster1$ = ReadStringN(ASE," ")
if (cluster1$="}") exit
if (cluster1$="*BITMAP")
name$ = ReadStringN(ASE,"")
MatTex1$(Id_mat) = EstractName$(name$);
end if
if (cluster1$="*UVW_U_OFFSET")
UVW_OffU1# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_V_OFFSET")
UVW_OffV1# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_U_TILING")
ut# = ReadStringN(ASE,"")
UVW_TileU1# = 1.0/ut#;
end if
if (cluster1$="*UVW_V_TILING")
vt# = ReadStringN(ASE,"")
UVW_TileV1# = 1.0/vt#;
end if
Wend
end if
;===>
if (cluster$ = "*MAP_REFLECT") then
While Not Eof(ASE)
cluster1$ = ReadStringN(ASE," ")
if (cluster1$="}") exit
if (cluster1$="*BITMAP")
name$ = ReadStringN(ASE,"")
MatTex2$(Id_mat) = EstractName$(name$);
end if
if (cluster1$="*UVW_U_OFFSET")
UVW_OffU2# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_V_OFFSET")
UVW_OffV2# = ReadStringN(ASE,"");
end if
if (cluster1$="*UVW_U_TILING")
ut# = ReadStringN(ASE,"")
UVW_TileU2# = 1.0/ut#;
end if
if (cluster1$="*UVW_V_TILING")
vt# = ReadStringN(ASE,"")
UVW_TileV2# = 1.0/vt#;
end if
Wend
end if
;===>
if (cluster$ = "*") then
Obj_name$ = ReadStringN(ASE," ")
end if
;===>
wend
end if

wend

end function


;---------------------------
;
;---------------------------
Function MESH_NORMALS(ASE)
id = 0
While Not Eof(ASE)
cluster1$ = ReadStringN(ASE," ")
if (cluster1$="*MESH_FACENORMAL")
No$ = ReadStringN(ASE," ")
XYZ_normal(id,0) = ReadStringN(ASE," ")
XYZ_normal(id,1) = ReadStringN(ASE," ")
XYZ_normal(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster1$="}") exit
Wend
end function
;---------------------------
;
;---------------------------
function MESH_VERTEX_LIST(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_VERTEX")
No$ = ReadStringN(ASE," ")
XYZ_vertex(id,0) = ReadStringN(ASE," ")
XYZ_vertex(id,1) = ReadStringN(ASE," ")
XYZ_vertex(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster2$="}") exit
Wend
end function
;---------------------------
;
;---------------------------
function MESH_FACE_LIST(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_FACE")
No$ = ReadStringN(ASE," ")
No$ = ReadStringN(ASE," ")
;---
f1 = ReadStringN(ASE," ") : No$ = ReadStringN(ASE," ")
f2 = ReadStringN(ASE," ") : No$ = ReadStringN(ASE," ")
f3 = ReadStringN(ASE," ")
XYZ_face(id,0) = f1
XYZ_face(id,1) = f2
XYZ_face(id,2) = f3
id = id+1
end if
if (cluster2$="}") exit
Wend
end function
;---------------------------
;
;---------------------------
function MESH_TVERTLIST(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_TVERT")
No$ = ReadStringN(ASE," ")
UVW_vertex(id,0) = ReadStringN(ASE," ")
UVW_vertex(id,1) = ReadStringN(ASE," ")
UVW_vertex(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster2$="}") exit
wend
end function
;---------------------------
;
;---------------------------
function MESH_TFACELIST(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_TFACE")
No$ = ReadStringN(ASE," ")
UVW_face(id,0) = ReadStringN(ASE," ")
UVW_face(id,1) = ReadStringN(ASE," ")
UVW_face(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster2$="}") exit
wend
end function
;---------------------------
;
;---------------------------
function MESH_TVERTLIST1(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_TVERT")
No$ = ReadStringN(ASE," ")
UVW_vertex1(id,0) = ReadStringN(ASE," ")
UVW_vertex1(id,1) = ReadStringN(ASE," ")
UVW_vertex1(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster2$="}") exit
wend
end function
;---------------------------
;
;---------------------------
function MESH_TFACELIST1(ASE)
id = 0
While Not Eof(ASE)
cluster2$ = ReadStringN(ASE," ")
if (cluster2$="*MESH_TFACE")
No$ = ReadStringN(ASE," ")
UVW_face1(id,0) = ReadStringN(ASE," ")
UVW_face1(id,1) = ReadStringN(ASE," ")
UVW_face1(id,2) = ReadStringN(ASE," ")
id = id+1
end if
if (cluster2$="}") exit
wend
end function
;=========================================================================
;=========================================================================
;=========================================================================
;---------------------------
;
;---------------------------

Function WriteBB3D( file, state$ )
select state$
;-------------------
case "Init"
b3dSetFile( file )

; b3dWriteString( "Export 3DSMax Ase To B3D" ) ;name
; b3dWriteString( "V&D Software Multimedia" ) ;name
; b3dWriteString( "Write VinsentX Vincenzo Caldarulo" ) ;name


b3dBeginChunk( "BB3D" )
b3dWriteInt( 1 ) ;version
;-------------------
case "Material"
for Id_mat = 0 to MAT_Count
b3dBeginChunk( "TEXS" )
;===> Diffuse map
b3dWriteString( MatTex0$(Id_mat) )
b3dWriteInt( 1 ) ;textureflag
b3dWriteInt( 2 ) ;textureblend
b3dWriteFloat( UVW_OffU0# ) ;x_pos
b3dWriteFloat( UVW_OffV0# ) ;y_pos
b3dWriteFloat( UVW_TileU0# );x_scale
b3dWriteFloat( UVW_TileV0# );y_scale
b3dWriteFloat( 0 ) ;rotation
;===> Light Map
b3dWriteString( MatTex1$(Id_mat) )
b3dWriteInt( 65536) ;textureflag for 2nd ! uv channel [65536=normal, 65584=clamp u,v and so on ...]
b3dWriteInt( 2 ) ;textureblend
b3dWriteFloat( UVW_OffU1# ) ;x_pos
b3dWriteFloat( UVW_OffV1# ) ;y_pos
b3dWriteFloat( UVW_TileU1# );x_scale
b3dWriteFloat( -UVW_TileV1# );y_scale
b3dWriteFloat( 0 ) ;rotation
;===> ReflectMap
b3dWriteString( MatTex2$(Id_mat) )
b3dWriteInt( 64 ) ;textureflag
b3dWriteInt( 2 ) ;textureblend
b3dWriteFloat( UVW_OffU2# ) ;x_pos
b3dWriteFloat( UVW_OffV2# ) ;y_pos
b3dWriteFloat( UVW_TileU2# );x_scale
b3dWriteFloat( UVW_TileV2# );y_scale
b3dWriteFloat( 0 ) ;rotation
;===>
b3dEndChunk() ;end of TEXS chunk
next

for Id_mat = 0 to MAT_Count
mat = Id_mat*3
b3dBeginChunk( "BRUS" )
;===>
b3dWriteInt( 3 ) ;textures per brush[1]
b3dWriteString( MatName$(Id_mat) ) ;name
b3dWriteFloat( MatR(Id_mat) ) ;red
b3dWriteFloat( MatG(Id_mat) ) ;green
b3dWriteFloat( MatB(Id_mat) ) ;blue
b3dWriteFloat( MatA(Id_mat) ) ;alpha
b3dWriteFloat( MatShine(Id_mat) ) ;shininess
b3dWriteInt( 0 ) ;blend
b3dWriteInt( 1 ) ;FX
b3dWriteInt( mat+0 ) ;texture_id UV0
b3dWriteInt( mat+2 ) ;texture_id UV0
b3dWriteInt( mat+1 ) ;texture_id UV1
;===>
b3dEndChunk() ;end of BRUS chunk
next
;-------------------
case "Mesh"
;stop
; if (Obj_name$="Plane01") then stop
b3dBeginChunk( "NODE" );------------sub nodes
b3dWriteString( Obj_name$);name
b3dWriteFloat( 0 ) ;x_pos XYZ_px#
b3dWriteFloat( 0 ) ;y_pos XYZ_py#
b3dWriteFloat( 0 ) ;y_pos XYZ_pz#
b3dWriteFloat( 1 ) ;x_scale XYZ_sx#
b3dWriteFloat( 1 ) ;y_scale XYZ_sy#
b3dWriteFloat( 1 ) ;z_scale XYZ_sz#
b3dWriteFloat( 1 ) ;rot_w XYZ_aw#
b3dWriteFloat( 0 ) ;rot_x XYZ_ax#
b3dWriteFloat( 0 ) ;rot_y XYZ_ay#
b3dWriteFloat( 0 ) ;rot_z XYZ_az#
WriteMESH1( mesh1 )
b3dEndChunk() ;end of NODE chunk
;-------------------
case "End"
b3dEndChunk() ;end of BB3D chunk
End Select
End Function
;==============================
;---------------------------
;
;---------------------------
Function WriteMESH1(curobj )
;stop
n_tris = (XYZ_Count_face-1)

b3dBeginChunk( "MESH" )
b3dWriteInt( -1 ) ;no 'entity' brush-<---the brush!!

b3dBeginChunk( "VRTS" )
b3dWriteInt( 0 ) ;flags - 0=no 1=normal 2=Vertex color
b3dWriteInt( 2 ) ;0 tex_coord sets
b3dWriteInt( 3 ) ;0 coords per set

For j=0 To n_tris
For k=2 To 0 step -1
;===> Id di ricostruzione triangoli
Id_Vert = XYZ_face(j,k)
Id_UV0 = UVW_face(j,k)
Id_UV1 = UVW_face1(j,k)
;===> XYZ Vertex
vx# = XYZ_vertex#(Id_Vert,0)
vy# = XYZ_vertex#(Id_Vert,2)
vz# = XYZ_vertex#(Id_Vert,1)
b3dWriteFloat( vx# ); VX
b3dWriteFloat( vy# ); VY
b3dWriteFloat( vz# ); VZ
;===> XYZ Vertex
nx# = XYZ_normal#(Id_Vert,0)
ny# = XYZ_normal#(Id_Vert,2)
nz# = XYZ_normal#(Id_Vert,1)
;b3dWriteFloat( nx# ); NX
;b3dWriteFloat( ny# ); NY
;b3dWriteFloat( nz# ); NZ
;===> UVW 0 Default Map
u0# = UVW_vertex#(Id_UV0,0)
v0# = UVW_vertex#(Id_UV0,1)
w0# = UVW_vertex#(Id_UV0,2)
b3dWriteFloat( u0# ) ; U0
b3dWriteFloat( v0# ) ; V0
b3dWriteFloat( w0# ) ; W0
;===> UVW 1 Light Map
u1# = UVW_vertex1#(Id_UV1,0)
v1# = UVW_vertex1#(Id_UV1,1)
w1# = UVW_vertex1#(Id_UV1,2)
b3dWriteFloat( u1# ) ; U1
b3dWriteFloat( v1# ) ; V1
b3dWriteFloat( w1# ) ; W1
;===>
Next
Next
b3dEndChunk() ;end of VRTS chunk

b3dBeginChunk( "TRIS" )
b3dWriteInt( UVW_for_XYZ ) ;brush for these triangles

For j=0 To n_tris
;===>
Tris_v = j*3
t1 = Tris_v+0
t2 = Tris_v+1
t3 = Tris_v+2
b3dWriteInt( t1 ); X
b3dWriteInt( t2 ); Y
b3dWriteInt( t3 ); Z
;===>
Next

b3dEndChunk() ;end of TRIS chunk

b3dEndChunk() ;end of MESH chunk

End Function