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

📄 import3ds.cpp

📁 3DS_ImportCode
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{
		fprintf(logfile, " local_centre_x,y,z : %f %f %f\n", 
			local_centre_x, local_centre_y, local_centre_z);
	}
	
	oblist[total_num_objects].local_centre_x = local_centre_x;
	oblist[total_num_objects].local_centre_y = local_centre_y;
	oblist[total_num_objects].local_centre_z = local_centre_z;
}



// PROCESS TEXTURE, MATERIAL, AND MAPPING DATA ROUTINES

void C3DS::AddMapName(HWND hwnd, FILE *fp, int pmodel_id)
{
	int	i; 
	BOOL error = TRUE;
	char map_name[256];

	// read in map name from file

	for (i = 0; i < 256; i++)
	{
		fread(&map_name[i], sizeof(char), 1, fp);
		if(map_name[i] == 0)
			break;
	}

	// remove file extention from string

	for (i = 0; i < 256; i++)
	{	
		if(map_name[i] == '.')
		{
			map_name[i] = 0;
			break;
		}
	}

		// lookup texture alias

	for (i = 0; i < 100; i++)
	{	
		if(strcmpi(map_name, pCMyApp->TexMap[i].tex_alias_name) == 0)
		{
			pCMyApp->pmdata[pmodel_id].texture_maps[num_maps] = i;
			error = FALSE;
			break;
		}
	}

	if(error == TRUE)
	{
		MessageBox(hwnd,"Error : AddMapName", map_name, MB_OK);
		strcpy(mapnames[num_maps], "error");
		return;
	}

	strcpy(mapnames[num_maps], map_name);
	if(bEnable3dsLogfile)
		fprintf(logfile, "%s %s\n", "MAPPING_NAME ", mapnames[num_maps]); 
	num_maps++;

}

void C3DS::AddMaterialName(HWND hwnd, FILE *fp)
{	
	int	i; 
	BOOL error = TRUE;
	char mat_name[256];

	for (i = 0; i < 256; i++)
	{
		fread(&mat_name[i], sizeof(char), 1, fp);
		if(mat_name[i] == 0)
		{
			error = FALSE;
			break;
		}
	}

	if(error == TRUE)
	{
		MessageBox(hwnd,"Error : AddMaterialName", NULL, MB_OK);
		strcpy(material_list[num_materials], "error");
		return;
	}

	if(bEnable3dsLogfile)
		fprintf(logfile,"MAT_NAME01  %s\n",mat_name);
	strcpy(material_list[num_materials], mat_name) ;
	num_materials++;
}

void C3DS::ProcessMaterialData(HWND hwnd, FILE *fp, int pmodel_id)
{
	int	i; 
	short findex, current_texture;
	unsigned short num_faces;
	BOOL error = TRUE;
	char mat_name[256];


	for (i = 0; i < 256; i++)
	{
		fread(&mat_name[i], sizeof(char), 1, fp);
		if(mat_name[i] == 0)
			break;
	}

	for (i = 0; i < MAX_NUM_3DS_TEXTURES; i++)
	{
		if(strcmpi(mat_name, material_list[i]) == 0)
		{
			current_texture = pCMyApp->pmdata[pmodel_id].texture_maps[i];
			error = FALSE;
			break;
		}
	}

	if(error == TRUE)
	{
		MessageBox(hwnd,"Error : ProcessMaterialData", NULL, MB_OK);
		strcpy(material_list[num_materials], "error");
		return;
	}

	fread(&num_faces, sizeof(num_faces), 1, fp);

	if(bEnable3dsLogfile)
		fprintf(logfile, "TRIANGLE_MATERIAL %d\n", num_faces);

	for (i = 0; i < num_faces; i++)
	{
		fread(&findex, sizeof(short), 1, fp);
		faces[last_num_faces + findex].tex = current_texture;
		object_texture[total_num_objects] = current_texture;
	}
	return;
}

void C3DS::ProcessMappingData(HWND hwnd, FILE *fp)
{
	int	i; 
	unsigned short num_mapping_coords;
	
	total_num_mcoords = last_num_verts;

	fread(&num_mapping_coords, sizeof(num_mapping_coords), 1, fp);

	if(bEnable3dsLogfile)
		fprintf(logfile, "%s %d\n", "TRIANGLE_MAPPINGCOORS ", num_mapping_coords);

	for (i = 0; i < num_mapping_coords; i++)
	{
		fread(&mcoords[total_num_mcoords].x, sizeof(float), 1, fp);
		fread(&mcoords[total_num_mcoords].y, sizeof(float), 1, fp);

		if(bEnable3dsLogfile)
		{
			fprintf(logfile, " %f %f\n", 
				mcoords[total_num_mcoords].x,
				mcoords[total_num_mcoords].y);
		}
		total_num_mcoords++;
	}
	return;
}



// KEYFRAME - PROCESS ANIMATION DATA ROUTINES

void C3DS::ProcessPivots(HWND hwnd, FILE *fp)
{
	float x,y,z;
	
	fread(&x, sizeof(float), 1, fp);
	fread(&y,  sizeof(float), 1, fp);
	fread(&z,  sizeof(float), 1, fp);

	oblist[kf_count].pivot.x = x;
	oblist[kf_count].pivot.y = y;
	oblist[kf_count].pivot.z = z;

	if(bEnable3dsLogfile)
		fprintf(logfile, "PIVOT: %f %f %f\n", x, y, z);	

	
}

void C3DS::ProcessRotationTrack(HWND hwnd, FILE *fp)
{		
	int i;
	short framenum;
	long lunknown; 
	float rotation_rad;
	float axis_x;
	float axis_y;
	float axis_z;



	fread(&pt_flags, sizeof(short), 1, fp);

	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);

	fread(&oblist[kf_count].rotkeys,	 sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	
	if(bEnable3dsLogfile)
		fprintf(logfile, "ROT_TRACK_TAG %d\n", oblist[kf_count].rotkeys);
	
	for(i = 0; i < oblist[kf_count].rotkeys; i++)
	{
		fread(&framenum,  sizeof(short), 1, fp);
		fread(&lunknown,  sizeof(long), 1, fp);
		fread(&rotation_rad,  sizeof(float), 1, fp);
		fread(&axis_x,  sizeof(float), 1, fp);
		fread(&axis_y,  sizeof(float), 1, fp);
		fread(&axis_z,  sizeof(float), 1, fp);

		if(bEnable3dsLogfile)
		{
			fprintf(logfile, " framenum = %d  rot_angle/rads = %f  axis_x,y,z : %f %f %f\n", 
			              framenum, rotation_rad, axis_x, axis_y, axis_z);	
		}

		if(i < total_num_frames)
		{
			oblist[kf_count].rot_track[i].framenum = framenum;
			oblist[kf_count].rot_track[i].lunknown = lunknown;
			oblist[kf_count].rot_track[i].rotation_rad = rotation_rad;
			oblist[kf_count].rot_track[i].axis_x = axis_x;
			oblist[kf_count].rot_track[i].axis_y = axis_y;
			oblist[kf_count].rot_track[i].axis_z = axis_z;
		}
	}

}

void C3DS::ProcessPositionTrack(HWND hwnd, FILE *fp)
{	
	
	int i;
	short framenum;
	long  lunknown;
	float pos_x;
	float pos_y;
	float pos_z;


	
	fread(&pt_flags, sizeof(short), 1, fp);

	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);

	fread(&oblist[kf_count].poskeys,	 sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	
	if(bEnable3dsLogfile)
		fprintf(logfile, "POS_TRACK_TAG %d\n", oblist[kf_count].poskeys);
	
	for(i = 0; i < oblist[kf_count].poskeys; i++)
	{
		fread(&framenum,  sizeof(short), 1, fp);
		fread(&lunknown,  sizeof(long), 1, fp);
		fread(&pos_x,  sizeof(float), 1, fp);
		fread(&pos_y,  sizeof(float), 1, fp);
		fread(&pos_z,  sizeof(float), 1, fp);

		if(bEnable3dsLogfile)
		{
			fprintf(logfile, " framenum = %d   pos_x,y,z : %f %f %f\n", 
			              framenum, pos_x, pos_y, pos_z);
		}

		if(i < total_num_frames)
		{
			//fprintf(logfile, "i: %d   total_num_frames: %d\n", 
			  //                i, total_num_frames);	

			oblist[kf_count].pos_track[i].framenum = framenum;
			oblist[kf_count].pos_track[i].lunknown = lunknown;
			oblist[kf_count].pos_track[i].pos_x = pos_x;
			oblist[kf_count].pos_track[i].pos_y = pos_y;
			oblist[kf_count].pos_track[i].pos_z = pos_z;
		}
	}
}
	
void C3DS::ProcessScaleTrack(HWND hwnd, FILE *fp)
{	
	
	int i;
	short framenum;
	long lunknown;		
	float scale_x;
	float scale_y;
	float scale_z;


	fread(&pt_flags, sizeof(short), 1, fp);

	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);

	fread(&oblist[kf_count].sclkeys,	 sizeof(short), 1, fp);
	fread(&unknown,  sizeof(short), 1, fp);
	
	if(bEnable3dsLogfile)
		fprintf(logfile, "SCL_TRACK_TAG %d\n", oblist[kf_count].sclkeys);
	
	for(i = 0; i < oblist[kf_count].sclkeys; i++)
	{
		fread(&framenum,  sizeof(short), 1, fp);
		fread(&lunknown,  sizeof(long), 1, fp);
		
		fread(&scale_x,  sizeof(float), 1, fp);
		fread(&scale_y,  sizeof(float), 1, fp);
		fread(&scale_z,  sizeof(float), 1, fp);

		if(bEnable3dsLogfile)
		{
			fprintf(logfile, " framenum = %d   x,y,z : %f %f %f\n", 
				framenum, scale_x, scale_y, scale_z);	
		}

	}
}

void C3DS::ProcessNodeId(FILE *fp)
{
	short node_id;


	fread(&node_id, sizeof(short), 1, fp);
	if(bEnable3dsLogfile)
		fprintf(logfile, "NODE_ID  %d\n", node_id); 
}

void C3DS::ProcessNodeHeader(FILE *fp)
{
	int i;
	short flags1, flags2, heirarchy;
	char node_name[256];


	// read in node name from file

	for (i = 0; i < 256; i++)
	{
		fread(&node_name[i], sizeof(char), 1, fp);
		if(node_name[i] == 0)
			break;
	}

	fread(&flags1, sizeof(short), 1, fp);
	fread(&flags2, sizeof(short), 1, fp);
	fread(&heirarchy, sizeof(short), 1, fp);

	if(bEnable3dsLogfile)
	{
		fprintf(logfile, "NODE_HDR %s\n", node_name);
		fprintf(logfile, " flags1 %d\n", flags1);
		fprintf(logfile, " flags2 %d\n", flags2);
		fprintf(logfile, " heirarchy %d\n", heirarchy);
	}

}

void C3DS::Process3DSVersion(FILE *fp)
{
	short version;

	fread(&version, sizeof(short), 1, fp);
	if(bEnable3dsLogfile)
		fprintf(logfile, "3DS VERSION %d\n",version);
	fread(&version, sizeof(short), 1, fp);
}

void C3DS::ProcessMasterScale(FILE *fp)
{
	float master_scale;

	fread(&master_scale, sizeof(float), 1, fp);
	if(bEnable3dsLogfile)
		fprintf(logfile, "MASTER_SCALE %f\n",master_scale);	
}

// RELEASE AND DEBUG ROUTINES

void C3DS::ReleaseTempMemory()
{
	
}

void C3DS::PrintLogFile(FILE *logfile, char *commmand)
{
	if(bEnable3dsLogfile)
	{
		fprintf(logfile, commmand);
		fprintf(logfile,"\n");
	}
	command_found_flag = TRUE;
}


void C3DS::Write_pmdata_debugfile(HWND hwnd, int pmodel_id)
{
	FILE *fp;
	int i;
	int frame_num;
	float x,y,z;
	int face;
	int num_verts;
	int num_faces;
	int tex;


	if ((fp = fopen("pmdata.txt", "w+")) == 0) 
	{
		MessageBox(hwnd,"logfile error : Can't open", "pmdata.txt", MB_OK);
		return;
	}

	////////////////////////////////////////////////////

	frame_num = 0;
	num_verts = pCMyApp->pmdata[pmodel_id].num_verts;

	fprintf(fp, "model id  =  %d\n\n", pmodel_id);	
	fprintf(fp, "num verts =  %d\n\n", num_verts);	

	for(i = 0; i < num_verts; i++)
	{
		x = pCMyApp->pmdata[pmodel_id].w[frame_num][i].x;
		y = pCMyApp->pmdata[pmodel_id].w[frame_num][i].y;
		z = pCMyApp->pmdata[pmodel_id].w[frame_num][i].z;
		fprintf(fp, "%d   %f %f %f\n", i, x, y, z);		
	}

	fprintf(fp, "\n");	

	////////////////////////////////////////////////////


	num_faces = pCMyApp->pmdata[pmodel_id].num_faces;

	
	fprintf(fp, "num_faces =  %d\n\n", num_faces);	

	for(i = 0; i < num_faces*3; i++)
	{
		face = pCMyApp->pmdata[pmodel_id].f[i];
		
		fprintf(fp, "%d   %d\n", i, face);		
	}

	fprintf(fp, "\n");	

	////////////////////////////////////////////////////


	num_faces = pCMyApp->pmdata[pmodel_id].num_faces;

	
	fprintf(fp, "num_faces =  %d tex\n\n", num_faces);	

	for(i = 0; i < num_faces*3; i++)
	{
		x = pCMyApp->pmdata[pmodel_id].t[i].x; 
		y = pCMyApp->pmdata[pmodel_id].t[i].y;
		
		fprintf(fp, "%d   %f %f\n", i, x, y);		
	}

	fprintf(fp, "\n");	
	
	////////////////////////////////////////////////////

	num_faces = pCMyApp->pmdata[pmodel_id].num_faces;

	for(i = 0; i < total_num_objects; i++)
	{
		tex = pCMyApp->pmdata[pmodel_id].texture_list[i];
			
		fprintf(fp, "%d   %d\n", i, tex);		
	}

	fprintf(fp, "\n");	

	////////////////////////////////////////////////////


	fclose (fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -