[ Ajvan @ 14.12.2007. 11:00 ] @
Kada export-ujem objekat iz 3ds max-a u ASCII fajl, taj fajl sadrzi, izmedju ostalog MESH_VERTEX_LIST za koordinatama tacaka, npr.:
MESH_VERTEX 0 X0 Y0 Z0
MESH_VERTEX 1 X1 Y1 Z1
MESH_VERTEX 2 X2 Y2 Z2
MESH_VERTEX 3 X3 Y3 Z3
MESH_VERTEX 4 X4 Y4 Z4
MESH_VERTEX 5 X5 Y5 Z5
MESH_VERTEX 6 X6 Y6 Z6
MESH_VERTEX 7 X7 Y7 Z7 (u ovom slucaju je 3ds max objekat kocka).

Sada zelim da ovaj objekat iscrtam u c# aplikaciji. Inicijalizujem DX i sve to radi kako treba. Problem je sto je ovakvo definisanje tacaka nezgrapno za iscrtavanje. Postoji li neki exporter za 3ds max koji exportuje objekat tako da se umesto koordinata tacaka dobiju koordinate trouglova, i onda primenom f-je Direct3D.PrimitiveType.TriangleStrip iscrta dati objekat?
Ja u sustini mogu da preuredim tacke unutar fajla tako da dobijem koordinate trouglova, medjutim sta kada je rec o slozenijem obliku?
[ glorius @ 14.12.2007. 15:33 ] @
Evo ti pravo resenje za to..

Ovo je MAX exporter. Exportuje mnooooogooooo toga...
http://www.andytather.co.uk/Panda/directxmax_downloads.aspx

Loadiras ga sa standardnom DirectX funkcijom D3DXLoadMeshFromFileX...

Pogledaj malo primere po netu.
[ genuine @ 18.12.2007. 01:17 ] @
Taj problem se najbolje resava jednostavnim pisanjem custom max skripte... Evo jedne koju sam ja radio za svoje potrebe..

fn AddToList List obj=(
b = false;

for o in List do
if o == obj do b = true;


if b == false do -- (List[(List.count+1)] = obj;);
List[List.count+1]= obj


return 0;
)



fn exportMaterial m fs =(
format "<MaterialBMP name=\"%\">\n" m.name to:fs
format "\t<Ambient r=% g=% b=%>\n" (m.Ambient.r/255.0) (m.Ambient.g/255.0) (m.Ambient.b/255.0) to:fs
format "\t<Diffuse r=% g=% b=%>\n" (m.Diffuse.r/255.0) (m.Diffuse.g/255.0) (m.Diffuse.b/255.0) to:fs
format "\t<Specular r=% g=% b=%>\n" (m.Specular.r/255.0) (m.Specular.g/255.0) (m.Specular.b/255.0) to:fs
format "\t<ShinninessExp value=% >\n" m.Glossiness to:fs
if ( m.DiffuseMap != undefined ) do
format "\t<Texture filename=\"%\">\n" m.DiffuseMap.Bitmap.filename to:fs

format "</MaterialBMP>\n" to:fs
)

fn exportMultiMaterial m fs =(
format "<MultiMaterial name=\"%\" numberofsubmaps=%>\n" m.name m.numsubs to:fs

for mat in m.MaterialList do
format "\t<SubMaterial name=\"%\">\n" mat.name to:fs


format "</MultiMaterial>\n" to:fs
)


fn exportmesh obj fs = (
format "<TriMesh name=\"MODEL-%\">\n" obj.name to:fs


format "\t<PositionCoords size=%>\n" (obj.verts.count) to:fs
for v in obj.verts do
format "\t\t<V3 id=% x=% y=% z=%>\n" (v.index-1) (v.pos.x) (v.pos.z) (v.pos.y) to:fs
format "\t</PositionCoords>\n" to:fs


format "\t<VertexNormalCoords size=%>\n" (obj.verts.count) to:fs
for i = 1 to obj.verts.count do (
v = getNormal obj i
format "\t\t<V3 id=% x=% y=% z=%>\n" (i-1) v.x v.z v.y to:fs
)
format "\t</VertexNormalCoords>\n" to:fs

format "\t<FaceNormalCoords size=%>\n" (getNumFaces obj) to:fs
for i = 1 to (getNumFaces obj) do (
v = getFaceNormal obj i
format "\t\t<V3 id=% x=% y=% z=%>\n" (i-1) v.x v.z v.y to:fs
)
format "\t</FaceNormalCoords>\n" to:fs



format "\t<TextureCoords size=%>\n" (getNumTVerts obj) to:fs
for i = 1 to (getNumTVerts obj) do (
v = getTVert obj i
format "\t\t<V2 id=% x=% y=%>\n" (i-1) v.x v.y to:fs

)
format "\t</TextureCoords>\n" to:fs

format "\t<Faces size=%>\n" (getNumFaces obj) to:fs
for i = 1 to (getNumFaces obj) do (
f1 = getFace obj i
f2 = getTVFace obj i
mid = getFaceMatId obj i
format "\t\t<F id=% A=% B=% C=% TA=% TB=% TC=% MId=%>\n" (i-1) (f1.x-1) (f1.y-1) (f1.z-1) (f2.x-1) (f2.y-1) (f2.z-1) mid to:fs

)
format "\t</Faces>\n" to:fs

format "\t<Pivot>\n" to:fs
format "\t\t<Pos x=% y=% z=%>\n" obj.pivot.x obj.pivot.z obj.pivot.y to:fs
format "\t\t<Rot x=% y=% z=% angle=%>\n" (obj.rotation.axis).x (obj.rotation.axis).z (obj.rotation.axis).y (obj.rotation.angle*6.28/360.0) to:fs
format "\t</Pivot>\n" to:fs




format "</TriMesh>\n" to: fs
)

utility MyGL_Exporter "MyGE Scene Exporter"
(
label l0 "Select Object for Export"
button exportbtn "Export to file"


label l1 "Exporter designed for" align:#left
label l2 "Computer Graphics Project" align:#left
label l3 "Dragisa Jankovic 395/01" align:#left


on exportbtn pressed do (
filename = getSaveFileName caption:"Export Object to File.."\
types:"MyGL ASCII scene(*.asc)|*.asc|"


if filename == undefined do return 0;

if selection.count == 0 do (
MessageBox "You must select objects for export!"
return 0
)

fs = createFile filename

for o in selection do (
if (isKindOf o Editable_Mesh) do (

format "<TModel name=\"%\">\n" o.name to:fs
format "\t<UsingModel name=\"MODEL-%\">\n" o.name to:fs
format "\t<UsingMaterial name=\"%\">\n" o.Material.name to:fs
if o.Children.count > 0 do (
format "\t<Childrens>\n" to:fs
for child in o.Children do
if ( finditem (Selection as array) child != 0 ) do
format "\t\t<Child name=\"%\">\n" child.name to:fs
format "\t</Childrens>\n" to:fs

)
format "</TModel>\n" to:fs



exportmesh o fs
)
)

MaterialList = #();

for o in selection do (

if (isKindOf o Editable_Mesh) do (
if ( isKindOf o.Material MultiMaterial ) then(
AddToList MaterialList o.Material;
for m in o.material.materialList do
AddToList MaterialList m;
)
else
AddToList MaterialList o.Material;

)
)

for mat in MaterialList do (
if ( isKindOf mat MultiMaterial ) then
exportMultiMaterial mat fs
else
exportMaterial mat fs

)



close fs
)
)