/* dump in WaveFront .obj format */
-void dump_nodes(char *basename, char *basepath) {
+void dump_nodes(char *basename) {
+ char file[256];
FILE *fp;
- int i;
-
+ int i, len;
+
+ /* generate output file name */
+ strcpy(file, basename);
+ len = strlen(file);
+ file[len-2] = '\0';
+ strcat(file, ".node");
+
/* dump vertices */
- printf(" writing vertices in .node format\n");
- /* printf("Creating node file: %s\n", file);
- fd = fopen(file, "w"); */
+ printf("Creating node file: %s\n", file);
+ printf(" writing vertices in .node format.\n");
+ fp = fopen(file, "w");
- printf("%d 2 1 0\n", nodecount);
+ fprintf(fp, "%d 2 1 0\n", nodecount);
/* now write out actual node data */
for ( i = 0; i < nodecount; i++ ) {
- printf("%d %.2f %.2f %.2f 0\n", i + 1,
+ fprintf(fp, "%d %.2f %.2f %.2f 0\n", i + 1,
nodes[i][0], nodes[i][1], nodes[i][2]);
}
- /* fclose(fd); */
-
+ fclose(fp);
}
build_node_list(basename, basepath);
/* dump in WaveFront .obj format */
- dump_nodes(basename, basepath);
+ dump_nodes(basename);
return(0);
}
/* $Log$
-/* Revision 1.1 1998/01/15 02:45:26 curt
-/* Initial revision.
+/* Revision 1.2 1998/01/15 21:33:36 curt
+/* Assembling triangles and building a new .node file with the proper shared
+/* vertices now works. Now we just have to use the shared normals and we'll
+/* be all set.
/*
+ * Revision 1.1 1998/01/15 02:45:26 curt
+ * Initial revision.
+ *
*/
1/14/98 - Don't create shared corners or edges if one already exists.
+1/14/98 - Reassemble triangles using only body, shared corners, and
+ shared edges.
+
--------------------------------------------------------------------------
| Todo
--------------------------------------------------------------------------
-1/14/98 - Reassemble triangles using only body, shared corners, and
- shared edges.
+1/15/98 - Retro-fit tri2obj to use shared normals rather than regenerating
+ normals for shared vertices.
1/12/98 - Try reversing cw-wound strips rather than calling glFrontFace()
in the display list.
$do_triangle_1 = 0;
$do_fixnode = 0;
$do_splittris = 0;
-$do_assemtris = 1;
+$do_assemtris = 0;
+$do_triangle_2 = 0;
-$do_tri2obj = 0;
+$do_tri2obj = 1;
$do_strips = 0;
$do_fixobj = 0;
}
-# 4.3 Retriangulate fixed up files (without -q option)
+# 4.3 Retriangulate reassembled files (without -q option) so no new
+# nodes are generated.
+
+if ( $do_triangle_2 ) {
+ @FILES = `ls $subdir`;
+ foreach $file ( @FILES ) {
+ print $file;
+ chop($file);
+ if ( ($file =~ m/\.node$/) && ($file !~ m/\.\d\.node$/) ) {
+ $command = "./Triangle/triangle $subdir/$file";
+ print "Running '$command'\n";
+ open(OUT, "$command |");
+ while ( <OUT> ) {
+ print $_;
+ }
+ close(OUT);
+
+ # remove input file.node
+ unlink("$subdir/$file");
+ }
+ }
+}
# 5. tri2obj file (.1.node) (.1.ele)
#
# Take the file.1.node and file.1.ele and produce file.1.obj
+#
+# Extracts normals out of the shared edge/vertex files, and uses
+# the precalcuated normals for these nodes instead of calculating
+# new ones. By sharing normals as well as vertices, not only are
+# the gaps between tiles eliminated, but the colors and lighting
+# transition smoothly across tile boundaries.
if ( $do_tri2obj ) {
@FILES = `ls $subdir`;
}
close(OUT);
- unlink("$subdir/$file.node");
- unlink("$subdir/$file.node.orig");
- unlink("$subdir/$file.ele");
+ # unlink("$subdir/$file.node");
+ # unlink("$subdir/$file.node.orig");
+ # unlink("$subdir/$file.ele");
}
}
}
#---------------------------------------------------------------------------
# $Log$
+# Revision 1.6 1998/01/15 21:33:33 curt
+# Assembling triangles and building a new .node file with the proper shared
+# vertices now works. Now we just have to use the shared normals and we'll
+# be all set.
+#
# Revision 1.5 1998/01/15 02:50:08 curt
# Tweaked to add next stage.
#