Can someone please fix this so it exports an object as shiny if it has materials on it?
/*
* .X Plug-in by Joe Cooning
* Joe Cooning Produx
* 2006
*/
/*
* Directives to install script as export plugin in Object editor.
*
* Required directives:
*
* #plugin("object", "export", <app-name>, <file-extension>);
* #file(<file-var>, [ "text" | "binary" ]);
* #return(<int-var>);
*
* <file-extension> - string, including initial '.'
* <app-name> - comment for export file open dialog.
* <file-var> - name of file variable. Must be declared later.
* <int-var> - int variable with result. 1 = success, 0 = failure.
*
*/
#plugin("object", "export", "Directx", ".x");
#file($output, "text");
#return($result);
file $output;
int $result;
object $curObject;
$curObject = project.curObject;
$output.print("xof 0302txt 0064\nHeader {\n1;\n0;\n1;\n}\n\n");
shape $shape, $shapes[1], $childShapes[1];
tridata $mdata;
int $numPoints, $numFaces, $numMaterials;
int $totalPoints;
int $ii, $jj;
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);
$output.print("// Group \"%s\" has %d children:\n",
$shape.name, $childShapes.size);
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 %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%.6f, %.6f, %.6f, 0.000000,\n%.6f, %.6f, %.6f, 0.000000,\n%.6f, %.6f, %.6f, 1.000000;;\n}\n",$tr1,$tr2,$tr3,$tr4);
$output.print("Mesh %s {\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("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\n");
$output.print("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");
$output.print("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");
$output.print("}\n}\n");
}
}
$result = 1; /* Assume export will succeed. */