亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? md3.cpp

?? direct3d游戲編程基礎源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// -----------------------------------------------------
// File: md3.cpp
// Description: methods to load and render a *.md3 file
//
// Author: Wolfgang Engel (wolf@direct3d.net)
// Internet: www.direct3d.net
// Last modified: 20. December 2000
//
// Copyright (c) 1999-2001 Wolfgang Engel wolf@direct3d.net
// -----------------------------------------------------
#include "md3.h"

// custom vertex structure
// Quake 3 uses hardware transformation, but not hardware lighting
struct MD3VERTEXBUFFERSTRUCT
{
    D3DXVECTOR3 p;
    FLOAT       tu, tv;
};

// Our custom FVF, which describes our custom vertex structure
#define FVF_MD3VERTEXBUFFERSTRUCT (D3DFVF_XYZ|D3DFVF_TEX1)

//-----------------------------------------------------------------------------
// Name: CMD3Model()
// Desc: The konstructor
//-----------------------------------------------------------------------------
CMD3Model::CMD3Model()
{
	m_pVB = NULL;  // vertex buffer
	iNumMeshes = 0;
}

//-----------------------------------------------------------------------------
// Name: CMD3Model()
// Desc: The konstructor
//-----------------------------------------------------------------------------
CMD3Model::~CMD3Model()
{
	DeleteModel();
}


//-----------------------------------------------------------------------------
// Name: CreateModel()
// Desc: Loads the *.md3 file
//-----------------------------------------------------------------------------
BOOL CMD3Model::CreateModel( char *fname, LPDIRECT3DDEVICE8 lpD3Ddevice)
{
	MD3HEADER		md3Header;
	MD3MESHFILE		md3MeshFile;
	FILE *md3File;

	DWORD m_dwNumberofVertices = 0;		// to fprintf the number of vertices
	DWORD m_dwNumberofTriangles = 0;	// to fprintf the number of triangles

	// if there are old vertex buffers and textures: delete them
	DeleteVB();
	DeleteTextures();
	DeleteModel();		// delete old model data

	// open file
    md3File = fopen( fname, "rb" );
	if( !md3File )
		return FALSE;

	// create and open log file
	LogFile = fopen("md3 geometry data.txt","w");

	// read MD3HEADER
	fread( &md3Header, sizeof( MD3HEADER ) ,1, md3File );

	fprintf(LogFile,"--- MD3 Header --- \n");
	fprintf(LogFile,"id: %s\niVersion: %d\n", md3Header.id, md3Header.iVersion);
	fprintf(LogFile,"Name of file: %s\n", md3Header.cFileName);
	fprintf(LogFile,"Number of bone frames: %d\n", md3Header.iBoneFrameNum);
	fprintf(LogFile,"Number of tags: %d\n", md3Header.iTagNum);
	fprintf(LogFile,"Number of meshes: %d\n", md3Header.iMeshNum);
	fprintf(LogFile,"Max. number of textures: %d\n", md3Header.iMaxTextureNum);
	fprintf(LogFile,"Header size: %d\n", md3Header.iHeaderSize);
	fprintf(LogFile,"Starting position of tag data: %d\n", md3Header.iTagStart);
	fprintf(LogFile,"End tag data: starting position of mesh data: %d\n", md3Header.iMeshStart);
	fprintf(LogFile,"Size of file: %d\n\n", md3Header.iFileSize);


	if (//(strcmp(md3Header.id,"IDP3")==0)&&
		(md3Header.iHeaderSize == 108)&&
		(md3Header.iFileSize > md3Header.iTagStart)&&
		(md3Header.iFileSize > md3Header.iMeshStart)&&
		(md3Header.iVersion == 15))
	{
	//---------------------------------------------------------------------------
	// Reads in the following order
	//	1. read bone frames
	//	2. read tags
	//	3. read meshes
	//---------------------------------------------------------------------------

	// read MD3BONEFRAME
	md3BoneFrame = new MD3BONEFRAME[md3Header.iBoneFrameNum];
	for(int i = 0; i < md3Header.iBoneFrameNum; i++)
	{
		fread( &md3BoneFrame[i], sizeof( MD3BONEFRAME ), 1, md3File );
	}
	delete[] md3BoneFrame;	// we won't use it here

	fprintf(LogFile,"--- Tags --- \n");

	// if there are tags: get them
	md3Tags = (MD3TAG**)new MD3TAG[md3Header.iBoneFrameNum];
	if (md3Header.iTagNum != 0)
	{
		for (i=0;i < md3Header.iBoneFrameNum;i++)
		{
			md3Tags[i] = (MD3TAG*)new MD3TAG[md3Header.iTagNum];
//			fprintf(LogFile,"\nBone Frame Num: %d\n", i);

			for (int j=0;j < md3Header.iTagNum; j++)
			{
				fread( &md3Tags[i][j], sizeof( MD3TAG ), 1, md3File );
//				fprintf(LogFile,"Tag name: %s\n", md3Tags[i][j].cTagName);
			}
		}
		delete[] md3Tags;	// we won't use it here
	}

	// read MD3MESHes
	iNumMeshes = md3Header.iMeshNum;
	pMd3Meshes = new MD3MESH[iNumMeshes];

	fprintf(LogFile,"\n--- MD3 Meshes ---\n");
	for(int j = 0; j < iNumMeshes; j++)
	{
		// Read MD3MESHFILE
		fread( &md3MeshFile, sizeof( MD3MESHFILE ), 1, md3File );

		// Log MD3MESHFILE
		fprintf(LogFile,"id: %s\n", md3MeshFile.cId);
		fprintf(LogFile,"Name of mesh: %s\n", &md3MeshFile.cName);
		fprintf(LogFile,"Number of mesh frames: %d\n", md3MeshFile.iMeshFrameNum);
		fprintf(LogFile,"Number of textures: %d\n", md3MeshFile.iTextureNum);
		fprintf(LogFile,"Number of vertices: %d\n", md3MeshFile.iVertexNum);
		fprintf(LogFile,"Number of triangles: %d\n", md3MeshFile.iTriangleNum);
		fprintf(LogFile,"Starting position of triangle data: %d\n", md3MeshFile.iTriangleStart);
		fprintf(LogFile,"Header size: %d\n", md3MeshFile.iHeaderSize);
		fprintf(LogFile,"Starting position of texture coordiantes data: %d\n", md3MeshFile.iTecVecStart);
		fprintf(LogFile,"Starting position of vertex data: %d\n", md3MeshFile.iVertexStart);
		fprintf(LogFile,"Size of MD3MESHFILE: %d\n", &md3MeshFile.iMeshSize);

		strcpy (pMd3Meshes[j].cName, md3MeshFile.cName);

		//-------------------------------------------------------------------------
		// Loading the mesh data in the following order:
		// 1. texnames
		// 2. triangles
		// 3. texcoords
		// 4. vertices
		//-------------------------------------------------------------------------
		pMd3Meshes[j].iNumTextures = md3MeshFile.iTextureNum;
		pMd3Meshes[j].pTexNames = new TEXNAMES[pMd3Meshes[j].iNumTextures];
		// always one mesh >= one texture
		for(i = 0; i < pMd3Meshes[j].iNumTextures; i++)
		{
			/* a few graphic tools write the wrong texture path
			   in the *.md3 file. Instead of 
			   models\players\conni
			   they write
			    odels\players\conni
			   with a space at the beginning. fread() ends reading
			   when a space shows up. The hack is reading in the 
			   whole stuff with fgetc() ... a little bit slower.
			   This one takes me hours :-( .
			*/
			char cTemp[68];
			for (int w = 0; w < 68; w++)
			{
			  cTemp[w] = fgetc(md3File);
			}
			cTemp[0] = 'M';				// hack !!!!!!!
	 		strcpy (pMd3Meshes[j].pTexNames[i], cTemp);
		}

		// triangles
		pMd3Meshes[j].pTriangles= new TRIANGLEVERT[md3MeshFile.iTriangleNum];
		DWORD x, y, z;
		for(i = 0; i < md3MeshFile.iTriangleNum; i++)
		{
			// Another hack:
			// some tools do not produce the right triangle data here.
			// This is normally the case at the end of the 
			// triangle data stream. 
			// I try to filter out the grab by using a high and low 
			// limit, which I have choosed by try and error.
			// BTW.: Loading the corrupted md3 file into milkshape and 
			//		 saving it unchanged helps a lot :-) 
			if (((x = ReadLong(md3File))< 0) || (x > 20000))
				x = 0;
			if (((y = ReadLong(md3File))< 0) || (y > 20000))
				y = 0;
			if (((z = ReadLong(md3File))< 0) || (z > 20000))
				z = 0;
			pMd3Meshes[j].pTriangles[i][0]= x;
			pMd3Meshes[j].pTriangles[i][1]= y;
			pMd3Meshes[j].pTriangles[i][2]= z;
		}

		// texture coordinates
		pMd3Meshes[j].pfTextureCoords = new TEXCOORDS [md3MeshFile.iVertexNum];
		for(i = 0; i < md3MeshFile.iVertexNum; i++)
		{
			pMd3Meshes[j].pfTextureCoords[i].u = ReadFloat(md3File);
			pMd3Meshes[j].pfTextureCoords[i].v = ReadFloat(md3File);
		}

		// vertices ...
		pMd3Meshes[j].vMeshFrames= new VMESHFRAME[md3MeshFile.iMeshFrameNum];
		for(i = 0; i < md3MeshFile.iMeshFrameNum; i++)
		{
			pMd3Meshes[j].vMeshFrames[i] = new D3DXVECTOR3[md3MeshFile.iVertexNum];

			for(int w = 0; w < md3MeshFile.iVertexNum; w++)
			{
				/* To handle a file from a right handed coordinates 
				   system, you might exchange the y and z value.
				*/
				pMd3Meshes[j].vMeshFrames[i][w].x = ReadShort(md3File) / 64.0f;
				pMd3Meshes[j].vMeshFrames[i][w].z = ReadShort(md3File) / 64.0f;
				pMd3Meshes[j].vMeshFrames[i][w].y = ReadShort(md3File) / 64.0f;
				ReadShort(md3File); // unknown
			}
		}
		pMd3Meshes[j].iNumVertices = md3MeshFile.iVertexNum;
		pMd3Meshes[j].iMeshFrameNum = md3MeshFile.iMeshFrameNum;
		pMd3Meshes[j].iNumTriangles = md3MeshFile.iTriangleNum;

		m_dwNumberofVertices += pMd3Meshes[j].iNumVertices;
		m_dwNumberofTriangles += pMd3Meshes[j].iNumTriangles;


		// md3 file read length
		int End = ftell(md3File);
		fprintf(LogFile,"End of Mesh in md3File at: %d\n\n", End);
	} //for nummeshes


	// close the *.md3 file
    fclose(md3File);

	}
	else
		return FALSE;

	fprintf(LogFile,"\n--- Model statistic ---\n");
	fprintf(LogFile,"Number of vertices: %d\n", m_dwNumberofVertices);
	fprintf(LogFile,"Number of triangles: %d\n", m_dwNumberofTriangles);

	// close the LogFile
	fclose(LogFile);

	// creates vertex buffer and textures
	CreateVB(lpD3Ddevice);
	CreateTextures(lpD3Ddevice);

  return TRUE;
}

//-----------------------------------------------------------------------------
// Name: DeleteModel()
// Desc: de allocate memory
//-----------------------------------------------------------------------------
void CMD3Model::DeleteModel()
{
/*
	if (md3BoneFrame)
		delete[] md3BoneFrame;

	if (md3Tags)
		delete[] md3Tags;
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色一情一伦一子一伦一区| 91色视频在线| av中文字幕亚洲| 欧美日韩成人综合| 亚洲国产精品成人综合色在线婷婷| 亚洲欧美成aⅴ人在线观看| 美女视频一区二区| 欧美三级中文字幕| 国产精品家庭影院| 国产乱码精品1区2区3区| 欧美日韩国产免费一区二区| 欧美韩国日本综合| 韩国成人福利片在线播放| 欧美日韩国产高清一区二区 | 欧美艳星brazzers| 日本一区二区动态图| 麻豆视频观看网址久久| 欧美日韩综合色| 亚洲精品乱码久久久久久 | 久久久综合激的五月天| 亚洲线精品一区二区三区八戒| 成年人国产精品| 久久综合九色综合97婷婷女人| 日韩精品亚洲一区| 欧美日韩黄色一区二区| 亚洲最大成人综合| 色一区在线观看| 一区二区视频免费在线观看| www.日韩av| 中文字幕一区二区三区不卡| 成人免费高清在线观看| 国产欧美日韩另类视频免费观看| 国产在线精品免费| 26uuu色噜噜精品一区| 久久激情综合网| 精品国产百合女同互慰| 91国产精品成人| 国产精品国产自产拍高清av王其| 国产美女av一区二区三区| 欧美成人精品二区三区99精品| 北条麻妃一区二区三区| 国产精品视频免费| 99久久精品免费| 亚洲一区在线电影| 7777女厕盗摄久久久| 久久99国产精品免费| 久久一二三国产| 91在线视频观看| 亚洲福利视频导航| 精品国产乱码久久久久久久| 国产馆精品极品| 亚洲欧美一区二区三区久本道91 | 蜜乳av一区二区| 26uuuu精品一区二区| 成人激情文学综合网| 亚洲影院理伦片| 欧美videos中文字幕| 成人中文字幕在线| 亚洲国产一区二区在线播放| 91精品国产入口| 成人综合婷婷国产精品久久| 亚洲国产一区二区三区| 2023国产精华国产精品| 99国产精品视频免费观看| 天堂成人国产精品一区| 国产免费成人在线视频| 欧美日韩中文精品| 国产精品99久久久久久有的能看| 国产精品911| 亚洲精品videosex极品| 亚洲精品一区二区三区在线观看| av不卡一区二区三区| 日韩高清一区二区| 国产精品美女久久久久久久网站| 欧美色倩网站大全免费| 国产乱码精品一品二品| 亚洲成人精品一区| 国产精品无遮挡| 欧美一区二区国产| 91小宝寻花一区二区三区| 美女视频黄免费的久久| 亚洲天堂av老司机| 欧美mv日韩mv国产网站app| 色偷偷久久一区二区三区| 国产一区二区三区精品视频| 香蕉影视欧美成人| 中文字幕欧美一| 久久精品欧美一区二区三区麻豆| 欧美午夜电影一区| 成人午夜激情视频| 久久激情综合网| 丝袜美腿亚洲一区| 亚洲一区二区综合| 亚洲欧洲成人av每日更新| 久久久久久一级片| 精品国产凹凸成av人导航| 欧美性色aⅴ视频一区日韩精品| 成人ar影院免费观看视频| 久久超级碰视频| 三级影片在线观看欧美日韩一区二区| 国产精品对白交换视频| 久久久国产精华| www成人在线观看| 91精品在线免费观看| 欧美久久婷婷综合色| 欧美色图激情小说| 色欧美88888久久久久久影院| 成人精品免费网站| 国产成人啪免费观看软件| 国产一区视频网站| 国产黄人亚洲片| 国产福利一区二区三区在线视频| 欧美高清性hdvideosex| 欧美日韩精品二区第二页| 欧美在线视频全部完| 欧美日韩一区二区三区高清| 色综合久久综合| 色狠狠av一区二区三区| 91免费国产在线| 欧美亚洲免费在线一区| 在线看一区二区| 精品视频色一区| 91精品国产麻豆国产自产在线| 5858s免费视频成人| 91精品福利在线一区二区三区| 51精品秘密在线观看| 日韩亚洲电影在线| 精品成人在线观看| 国产欧美日韩精品在线| 国产精品免费久久| 亚洲欧美日韩国产手机在线| 亚洲综合999| 免费观看日韩电影| 国产电影一区在线| 91小视频免费看| 欧美精品视频www在线观看| 日韩一区二区三区四区| 久久久99精品免费观看| 亚洲欧洲精品天堂一级| 亚洲一二三四久久| 麻豆成人免费电影| 成人精品一区二区三区中文字幕| 欧美综合一区二区| 日韩一区二区在线观看视频播放| 久久亚洲捆绑美女| 日韩理论片在线| 日本美女一区二区三区视频| 激情都市一区二区| 色综合中文综合网| 亚洲另类中文字| 日本不卡高清视频| 成人免费视频视频在线观看免费| 一本到一区二区三区| 日韩免费一区二区三区在线播放| 亚洲国产精品激情在线观看| 天堂影院一区二区| 国产69精品久久久久777| 日本韩国视频一区二区| 精品美女被调教视频大全网站| 国产精品女同互慰在线看| 亚洲国产成人va在线观看天堂| 黄色日韩三级电影| 欧美最猛性xxxxx直播| 久久久久久久电影| 舔着乳尖日韩一区| av高清久久久| 欧美mv日韩mv国产网站| 亚洲国产成人av好男人在线观看| 国产高清不卡一区二区| 欧美一区二区三区爱爱| 亚洲品质自拍视频| 高清国产一区二区三区| 日韩免费视频一区| 午夜久久久久久久久| 色综合咪咪久久| 国产精品素人一区二区| 韩国一区二区三区| 日韩午夜电影在线观看| 亚洲国产精品欧美一二99| 99久久久精品| 国产清纯美女被跳蛋高潮一区二区久久w | caoporm超碰国产精品| 欧美三级视频在线观看| 国产午夜精品一区二区| 日本成人在线一区| 欧美在线你懂的| 亚洲欧美日韩国产综合在线| 成人中文字幕合集| 久久久久久久久久久电影| 免费在线观看视频一区| 欧美精品久久99| 亚洲国产欧美一区二区三区丁香婷| 91美女视频网站| 综合分类小说区另类春色亚洲小说欧美| 国产一区高清在线| 一区二区国产视频| 99r精品视频| 亚洲国产精品ⅴa在线观看| 国产成人综合在线播放| 欧美精品色一区二区三区|