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

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

?? md3.cpp

?? Direct3D游戲編程入門教程源代碼.rar
?? 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一区二区三区免费野_久草精品视频
国产一区二区在线免费观看| 久草在线在线精品观看| 18成人在线观看| 久久精品在线观看| 欧美激情在线一区二区| 国产亚洲污的网站| 国产精品国产成人国产三级| 国产精品热久久久久夜色精品三区| 国产午夜精品福利| 综合av第一页| 亚洲地区一二三色| 六月丁香婷婷久久| 国产精品123| 99久久99久久综合| 欧美伊人久久大香线蕉综合69| 在线亚洲精品福利网址导航| 精品视频在线免费看| 欧美成人官网二区| 国产精品三级av| 亚洲午夜精品在线| 久久99精品网久久| 91亚洲精品一区二区乱码| 在线观看av不卡| 精品av久久707| 中文字幕色av一区二区三区| 亚洲国产一区在线观看| 国产一区在线看| 在线看不卡av| 久久久99久久精品欧美| 亚洲一级在线观看| 国产精品资源在线| 欧美日韩一二三区| 国产日韩三级在线| 丝袜国产日韩另类美女| 成人性生交大片免费看在线播放| 在线免费观看视频一区| 国产欧美一区二区精品婷婷 | 91免费视频观看| 91精品国产美女浴室洗澡无遮挡| 久久久精品综合| 亚瑟在线精品视频| 成人av集中营| 精品久久久久久久久久久院品网| 亚洲女性喷水在线观看一区| 久久91精品国产91久久小草| 一本久道中文字幕精品亚洲嫩| 日韩视频一区二区三区 | 图片区小说区区亚洲影院| 国产大陆a不卡| 欧美电影在哪看比较好| 一区二区三区小说| 成人综合在线网站| 久久久天堂av| 久久不见久久见免费视频7| 欧美日韩aaa| 亚洲综合免费观看高清在线观看| 丁香婷婷综合色啪| 久久精品一区二区三区四区| 喷水一区二区三区| 91精选在线观看| 亚洲福利视频一区二区| 91丨porny丨户外露出| 久久精品一区二区| 国产一区二区伦理片| 91精品婷婷国产综合久久竹菊| 亚洲国产精品精华液网站| 91在线观看地址| 国产精品欧美精品| 成人av电影在线| 国产精品萝li| 91视频观看视频| 一区二区三区四区精品在线视频| va亚洲va日韩不卡在线观看| 国产精品久久久久久久第一福利| 国产电影一区二区三区| 久久久99精品免费观看| 精品一二线国产| 国产色爱av资源综合区| 国产成人精品aa毛片| 国产精品色哟哟网站| 色综合天天性综合| 亚洲一区二区3| 欧美夫妻性生活| 国产乱子轮精品视频| 精品少妇一区二区三区| 国产精品资源站在线| 亚洲欧美影音先锋| 欧美日韩精品福利| 九色porny丨国产精品| 久久久不卡网国产精品二区| 成人白浆超碰人人人人| 最好看的中文字幕久久| 在线影视一区二区三区| 麻豆久久久久久久| 国产精品乱人伦一区二区| www.日韩精品| 日韩高清欧美激情| 精品国产三级电影在线观看| 成人免费毛片嘿嘿连载视频| 国产精品国产三级国产aⅴ原创| 欧美最猛性xxxxx直播| 秋霞av亚洲一区二区三| 国产女同互慰高潮91漫画| 欧美三级午夜理伦三级中视频| 蜜桃视频免费观看一区| 中文字幕中文字幕在线一区| 91精品国产综合久久久蜜臀图片| 国产黄色精品视频| 婷婷丁香久久五月婷婷| 中文字幕欧美日韩一区| 538在线一区二区精品国产| 国产精品12区| 日韩高清不卡一区| 亚洲美女精品一区| 91精品国产91久久久久久一区二区 | 久久精品一区二区三区不卡牛牛 | 亚洲成人1区2区| 中文字幕免费一区| 欧美一级黄色大片| 一本色道久久综合亚洲91| 国产乱一区二区| 日韩国产一二三区| 亚洲一区二区三区三| 亚洲国产精品成人综合色在线婷婷| 欧美久久久久免费| 91免费看视频| 成人午夜私人影院| 国产一区 二区| 日本三级亚洲精品| 亚洲动漫第一页| 欧美国产1区2区| 久久久精品免费观看| 日韩免费高清电影| 欧美综合视频在线观看| 99riav一区二区三区| 成人性生交大片免费看视频在线 | 欧美成人r级一区二区三区| 在线视频欧美区| 91香蕉视频污| 成人av一区二区三区| 国产91富婆露脸刺激对白| 精品在线一区二区| 精东粉嫩av免费一区二区三区| 日韩高清欧美激情| 欧美aaa在线| 青青草成人在线观看| 青青草精品视频| 久久精品国产一区二区| 老司机精品视频导航| 久久国产精品露脸对白| 久久国产欧美日韩精品| 韩国理伦片一区二区三区在线播放 | 欧美日韩高清一区二区三区| 91国产免费看| 91成人免费在线| 欧美日韩视频专区在线播放| 欧美午夜精品久久久久久超碰| 欧美性极品少妇| 欧美乱熟臀69xxxxxx| 69堂国产成人免费视频| 亚洲精品一区二区三区四区高清| 久久久亚洲高清| 亚洲天堂中文字幕| 亚洲风情在线资源站| 五月综合激情婷婷六月色窝| 日本免费在线视频不卡一不卡二| 日韩—二三区免费观看av| 麻豆久久一区二区| 国v精品久久久网| 91啪亚洲精品| 欧美丰满一区二区免费视频| www激情久久| 亚洲色图视频网站| 日韩成人av影视| 国产综合成人久久大片91| www.av亚洲| 91精品国产色综合久久| 国产亚洲1区2区3区| 亚洲一二三四区| 国产最新精品免费| 91蜜桃视频在线| 日韩午夜在线播放| 国产精品二三区| 日韩激情av在线| 成人av网址在线| 欧美一区二区视频观看视频| 久久久久国产精品厨房| 一级特黄大欧美久久久| 九九九精品视频| 欧美吞精做爰啪啪高潮| 精品国产髙清在线看国产毛片| 国产精品乱人伦| 美女视频网站久久| 在线观看国产91| 国产精品视频免费| 久久精品二区亚洲w码| 91极品美女在线| 欧美激情一区二区三区蜜桃视频| 天天影视涩香欲综合网| 99久久综合99久久综合网站|