⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readflt.cpp

📁 空战游戏flacon源码
💻 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 + -