📄 readflt.cpp
字号:
#include "header.h"
void displayRecord (char *rec);
void main (int argc, char *argv[])
{
char buffer[80];
printf ("\nREADFLT v1.0 by Erick Jap\n\n");
if (argc < 2) {
printf ("Please enter flt file --> ");
scanf ("%s", buffer);
}
else strcpy (buffer, argv[1]);
CFileIO myfile;
if (!myfile.openread (buffer)) {
printf ("Can not open input file %s\n", buffer);
exit (1);
}
while (!myfile.eof()) {
char *record = getRecord (myfile);
if (!record) exit (1);
swapRecord (record);
displayRecord (record);
free (record);
}
}
int vertexsize;
int vertexno;
int stackcounter=0, substackcounter=0;
int polycounter;
void displayRecord (char *rec)
{
short rectype, reclen;
short *srec = (short *) rec;
rectype = *srec++;
reclen = *srec++;
switch (rectype) {
case OPCODE_HEADER:
{
flt_HeaderRecord *header;
header = (flt_HeaderRecord *) rec;
printf ("-----Header %s is created on %s",
header -> IDField, header -> dateRev);
printf ("Unit used = %d\n", (int) header -> vertexUnit);
stackcounter = 0;
polycounter = 0 ;
}
break;
case OPCODE_GROUP:
{
flt_GroupRecord *group;
group = (flt_GroupRecord *) rec;
printf ("-----Group %s\n", group -> IDField);
}
break;
case OPCODE_OBJECT:
{
flt_ObjectRecord *object;
object = (flt_ObjectRecord *) rec;
printf ("-----Object %s\n", object -> IDField);
}
break;
case OPCODE_BINARY_SEPARATING_PLANE:
{
flt_BinarySeparatingPlane *bsp;
bsp = (flt_BinarySeparatingPlane *) rec;
printf ("-----BSP %s\n", bsp -> IDField);
printf ("a = %f b = %f c = %f d = %f\n",
bsp -> a, bsp -> b, bsp -> c, bsp -> d);
}
break;
case OPCODE_SHARED_VERTEX_TABLE:
{
flt_SharedVertex *vtx;
vtx = (flt_SharedVertex *) rec;
printf ("-----Shared_Vertex %d\n", vtx -> totalLen);
vertexsize = sizeof (flt_SharedVertex);
vertexno = 0;
}
break;
case OPCODE_VERTEX_COORDINATE:
{
flt_VertexCoordinate *vtx;
vtx = (flt_VertexCoordinate *) rec;
printf ("-----Vertex_Coordinate %d Offset %d\n", vertexno++, vertexsize);
vertexsize += sizeof (flt_VertexCoordinate);
printf ("x = %f y = %f z = %f\n", vtx->x, vtx->y, vtx->z);
}
break;
case OPCODE_VERTEX_WITH_NORMAL:
{
flt_VertexCoordinateNormal *vtx;
vtx = (flt_VertexCoordinateNormal *) rec;
printf ("-----Vertex_Normal %d Offset %d\n", vertexno++, vertexsize);
vertexsize += sizeof (flt_VertexCoordinateNormal);
printf ("x = %f y = %f z = %f\n", vtx->x, vtx->y, vtx->z);
printf ("nx = %f ny = %f nz = %f\n", vtx->nx, vtx->ny, vtx->nz);
}
break;
case OPCODE_VERTEX_WITH_UV:
{
flt_VertexCoordinateTexture *vtx;
vtx = (flt_VertexCoordinateTexture *) rec;
printf ("-----Vertex_Texture %d Offset %d\n", vertexno++, vertexsize);
vertexsize += sizeof (flt_VertexCoordinateTexture);
printf ("x = %f y = %f z = %f ", vtx->x, vtx->y, vtx->z);
printf ("u = %f v = %f\n", vtx->u, vtx->v);
}
break;
case OPCODE_VERTEX_WITH_NORMAL_AND_UV:
{
flt_VertexCoordinateTextureNormal *vtx;
vtx = (flt_VertexCoordinateTextureNormal *) rec;
printf ("-----Vertex_Texture_Normal %d Offset %d\n", vertexno++, vertexsize);
vertexsize += sizeof (flt_VertexCoordinateTextureNormal);
printf ("x = %f y = %f z = %f", vtx->x, vtx->y, vtx->z);
printf ("v = %f v = %f\n", vtx->u, vtx->v);
printf ("nx = %f ny = %f nz = %f\n", vtx->nx, vtx->ny, vtx->nz);
}
break;
case OPCODE_VERTEX_LIST:
{
flt_VertexList *vtx;
vtx = (flt_VertexList *) rec;
int i = (vtx -> recordLen-4)/4;
printf ("-----VertexList TotalVertices %d ", i);
printf (" Vertex Offset");
int j;
for (j=0;j < i;j++) {
printf (" %d", vtx -> offset[j]);
}
printf ("\n");
}
break;
case OPCODE_POLYGON:
{
flt_PolygonRecord *poly;
poly = (flt_PolygonRecord *) rec;
printf ("-----Polygon %d ", polycounter++);
printf ("PrimaryColor %x ", (unsigned short) poly->primaryColor);
printf ("SecondaryColor %x ", (unsigned short) poly->secondaryColor);
printf ("TextureNo %d\n", poly->textureNo);
printf ("DetailTextureNo %d ", poly->detailTextureNo);
printf ("TexWhite %d ", (int) poly->texWhite);
printf ("TemplateTransparency %d\n", (int)poly->templateTransparency);
printf ("PackedPrimaryColor %x ", poly->packedPrimaryColor);
printf ("PackedSecondaryColor %x\n", poly->packedSecondaryColor);
}
break;
case OPCODE_COLOR_TABLE:
{
flt_ColorRecord *col;
col = (flt_ColorRecord *) rec;
printf ("-----Color_Table %d\n", reclen);
int i;
for (i=0;i < 512;i++) {
printf ("%x", col -> rgb[i]);
if ((i+1) & 7) printf (" ");
else printf ("\n");
}
}
break;
case OPCODE_MATERIAL_TABLE:
{
flt_MaterialRecord *mat;
mat = (flt_MaterialRecord *) rec;
printf ("-----Material %d\n", reclen);
}
break;
case OPCODE_PUSH_LEVEL:
{
stackcounter++;
printf ("-----Push %d\n", stackcounter);
}
break;
case OPCODE_POP_LEVEL:
{
stackcounter--;
printf ("-----Pop %d\n", stackcounter);
}
break;
case OPCODE_PUSH_SUBFACE:
{
substackcounter++;
printf ("-----Push SubFace %d\n", substackcounter);
}
break;
case OPCODE_POP_SUBFACE:
{
substackcounter--;
printf ("-----Pop SubFace %d\n", substackcounter);
}
break;
case OPCODE_LONG_IDENTIFIER:
{
flt_LongIDRecord *longid;
longid = (flt_LongIDRecord *) rec;
printf ("-----LongID %d\n", longid -> id);
}
break;
case OPCODE_TEXTURE_REFERENCE_RECORD:
{
flt_TexturePatternRecord *tex;
tex = (flt_TexturePatternRecord *) rec;
printf ("-----TextureReference %s ", tex -> filename);
printf ("%x %d %d\n", tex -> patternIndex, tex -> xloc, tex -> yloc);
}
break;
case OPCODE_PUT_TRANSFORM:
{
flt_PutRecord *putrec = (flt_PutRecord *) rec;
printf ("-----Put Transform\n");
printf ("FromOrigin %f %f %f\n", putrec -> fromoriginx,
putrec -> fromoriginy,
putrec -> fromoriginz);
printf ("FromAlign %f %f %f\n", putrec -> fromalignx,
putrec -> fromaligny,
putrec -> fromalignz);
printf ("FromTrack %f %f %f\n", putrec -> fromtrackx,
putrec -> fromtracky,
putrec -> fromtrackz);
printf ("ToAlign %f %f %f\n", putrec -> toalignx,
putrec -> toaligny,
putrec -> toalignz);
printf ("ToTrack %f %f %f\n", putrec -> totrackx,
putrec -> totracky,
putrec -> totrackz);
printf ("temp %f %f %f %d\n", putrec -> temp1, putrec -> temp2, putrec -> temp3, putrec -> temp);
}
break;
case OPCODE_TRANSLATE_TRANSFORM:
{
flt_TranslateRecord *trec = (flt_TranslateRecord *) rec;
printf ("-----Translate Transform\n");
printf ("Reference From Point %f %f %f\n", trec -> refx, trec -> refy, trec -> refz);
printf ("Delta %f %f %f\n", trec -> deltax, trec -> deltay, trec -> deltaz);
}
break;
case OPCODE_ROTATE_ABOUT_POINT_TRANSFORM:
{
flt_RotatePointRecord *rot = (flt_RotatePointRecord *) rec;
printf ("-----Rotate About Point Transform\n");
printf ("Center %f %f %f\n", rot -> centerx, rot -> centery, rot -> centerz);
printf ("Axis %f %f %f Angle %f\n", rot -> axisi, rot -> axisj, rot -> axisk, rot -> angle);
printf ("temp %f %d\n", (float) rot -> temp, rot -> temp);
}
break;
case OPCODE_EXTERNAL_REFERENCE:
{
flt_ExternalReferenceRecord *ext = (flt_ExternalReferenceRecord *) rec;
int i = getUnixFilename (ext -> filename);
printf ("Ext filename %s\n", ext -> filename+i);
}
break;
case OPCODE_TRANSFORMATION_MATRIX:
{
flt_TransformationMatrixRecord *mat = (flt_TransformationMatrixRecord *) rec;
printf ("Transformation Matrix\n");
printf ("%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n",
mat -> matrix[0],mat -> matrix[1],mat -> matrix[2],mat -> matrix[3],
mat -> matrix[4],mat -> matrix[5],mat -> matrix[6],mat -> matrix[7],
mat -> matrix[8],mat -> matrix[9],mat -> matrix[10],mat -> matrix[11],
mat -> matrix[12],mat -> matrix[13],mat -> matrix[14],mat -> matrix[15]);
}
break;
case OPCODE_BOUNDING_BOX:
{
flt_BoundingBoxRecord *box = (flt_BoundingBoxRecord *) rec;
printf ("-----Bounding Box\n");
printf ("Minimum %f %f %f\n", box -> minx, box -> miny, box -> minz);
printf ("Maximum %f %f %f\n", box -> maxx, box -> maxy, box -> maxz);
}
break;
default:
printf ("\n-----Unsupported Record Type!!!\n");
printf ("Record type is ");
DisplayUnsupportedType (rectype);
printf (" Record len is %d\n", reclen);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -