42
« on: March 19, 2012, 08:51:23 am »
This is what I have so far. 3D Exploration shows these errors.
/*
* This plugin pieced together from Joe Cooning and Zaidon's
* .X exporters with some independent work.
*
* Written by Raxx, this is compatible with the Battlezone II
* Combat Commander game engine and being modified by BNG for use with BZII as an XSI variant of Raxx's X variant.
*
* Copyright 2012 Randall Bezant. Permission granted for
* modification and use, including commercial use. Source
* distribution must include this copyright.
*/
#plugin("object", "export", "BZ II XSI", ".xsi");
#file($output, "text");
#return($result);
file $output;
int $result;
object $curObject;
$curObject = project.curObject;
$output.print("xsi 0101txt 0032\nSI_CoordinateSystem coord\n\n {\n1;\n0;\n1;\n0;\n2;\n5;\n}\n\n");
shape $shape, $shapes[1], $childShapes[1];
tridata $mdata;
int $numPoints, $numFaces, $numMaterials;
int $ii;
point3 $point, $normal, $tr1, $tr2, $tr3, $tr4;
point2 $uv;
float4x4 $transformMat;
string $matName, $texFile;
material $material;
texture $tex;
/* The shapes in $shapes are processed in reverse order so */
/* reverse the array of values that GeetShapes returns: */
$curObject.GetShapes($childShapes);
$shapes.size = 0;
while ($childShapes.size > 0)
$shapes.push($childShapes.pop());
while ($shapes.size > 0) {
$shape = $shapes.pop();
/* If $shape is a group push child shapes onto stack: */
if ($shape.GetKind() == SHAPE_KIND_GROUP) {
$shape.GetShapes($childShapes);
while ($childShapes.size > 0) {
$shapes.push($childShapes.pop());
}
} else if ($shape.GetKind() == SHAPE_KIND_PATH ||
$shape.GetKind() == SHAPE_KIND_MODIFIER ||
$shape.GetKind() == SHAPE_KIND_TEXT)
{
/* No 3D mesh to output. */
} else {
$mdata = $shape.GetTriangleData();
$output.print("Frame Frm-%s {\nFrameTransformMatrix {\n", $shape.name);
$transformMat = $shape.GetGlobalTransform();
$tr4=$transformMat.Project((0.0,0.0,0.0));
$tr1=$transformMat.Project((1.0,0.0,0.0))-$tr4;
$tr2=$transformMat.Project((0.0,1.0,0.0))-$tr4;
$tr3=$transformMat.Project((0.0,0.0,1.0))-$tr4;
$output.print(" %.6f,%.6f,%.6f,0.000000,\n",$tr1);
$output.print(" %.6f,%.6f,%.6f,0.000000,\n",$tr2);
$output.print(" %.6f,%.6f,%.6f,0.000000,\n",$tr3);
$output.print(" %.6f,%.6f,%.6f,1.000000;;\n }\n",$tr4);
$output.print("Mesh %s_mesh {\n", $shape.name);
$numPoints = $mdata.GetNumPoints();
$output.print("%d;\n", $numPoints);
for $ii = 0 to $numPoints-1 do {
$point = $mdata.GetPoint($ii);
$point.z =$point.z * -1;
$output.print("%.6f; %.6f; %.6f;", $point);
if ($ii<$numPoints-1){
$output.print(",\n");
} else {
$output.print(";\n");
}
}
$numFaces = $mdata.GetNumTriangles();
$output.print("%d;\n", $numFaces);
for $ii = 0 to $numFaces - 1 do {
$output.print("3;%d,%d,%d;", $mdata.GetIndex($ii*3 + 2), $mdata.GetIndex($ii*3 + 1), $mdata.GetIndex($ii*3));
if ($ii<$numFaces-1){
$output.print(",\n");
} else {
$output.print(";\n");
}
}
$output.print("MeshMaterialList {\n");
$numMaterials = $mdata.GetNumMaterials();
$output.print("%d;\n", $numMaterials);
$output.print("%d;\n", $numFaces);
for $ii = 0 to $numFaces - 1 do {
$output.print("%d", $mdata.GetMatIndex($ii));
if ($ii<$numFaces - 1) {
$output.print(",\n");
} else {
$output.print(";\n");
}
}
for $ii = 0 to $numMaterials - 1 do {
$material = $mdata.GetMaterial($ii);
$tex = $material.GetTexture(TEXTURE_DIFFUSE);
$matName = $material.name;
if ($matName == " -- default --") {
$matName = "___default___";
}
$output.print("SI_Material %s {\n", $matName);
$output.print("%.6f; %.6f; %.6f; %.6f;;\n", $material.diffuse, $material.alpha);
$output.print("%.6f;\n", $material.Ks);
$output.print("%.6f; %.6f; %.6f;;\n", $material.specular);
$output.print("%.6f; %.6f; %.6f;;\n", $material.emissive);
$texFile = $tex.GetFileName();
if ($texFile != ""){
$output.print("TextureFilename {\n\"%s.%s\";\n}\n", $texFile.GetRoot(), $texFile.GetExt());
}
$output.print("}\n");
}
$output.print("}\n");
$output.print("}\n}\n");
$output.print("SI_MeshNormals {\n%d;\n", $numPoints);
for $ii = 0 to $numPoints - 1 do {
$normal = $mdata.GetNormal($ii);
$normal.z = $normal.z * -1;
$output.print("%.6f; %.6f; %.6f;", $normal);
if ($ii<$numPoints-1){
$output.print(",\n");
} else {
$output.print(";\n");
}
}
$output.print("%d;\n", $numFaces);
for $ii = 0 to $numFaces - 1 do {
$output.print("3; %d,%d,%d;", $mdata.GetIndex($ii*3 + 2), $mdata.GetIndex($ii*3 + 1), $mdata.GetIndex($ii*3));
if ($ii<$numFaces-1){
$output.print(",\n");
} else {
$output.print(";\n");
}
}
$output.print("}\n\n");
$output.print("SI_MeshTextureCoords {\n%d;\n", $numPoints);
for $ii = 0 to $numPoints - 1 do {
$uv = $mdata.GetTexCoord($ii);
$uv.y = 1.0-$uv.y;
$output.print("%.5f; %.5f;", $uv);
if ($ii<$numPoints - 1){
$output.print(",\n");
} else {
$output.print(";\n");
}
}
$output.print("}\n");
}
}
$result = 1; /* Assume export will succeed. */