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

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

?? model.cpp

?? <B>DirectX9.0 3D游戲編程</B>
?? CPP
字號:
/*******************************************************************
 *         Advanced 3D Game Programming using DirectX 9.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * copyright (c) 2003 by Peter A Walsh and Adrian Perez
 * See license.txt for modification and distribution information
 ******************************************************************/

#include "stdafx.h"
#include "Model.h"
#include "file.h"

using namespace std;

cModel::cModel( const char* name, int nVerts, int nTris ) :
	m_name( name )
{
	int i;

	m_verts.reserve( nVerts );
	vertex vert;
	for( i=0; i<nVerts; i++ )
	{
		m_verts.push_back( vert );
	}

	m_tris.reserve( nTris );
	sTri tri;
	for( i=0; i<nTris; i++ )
	{
		m_tris.push_back( tri );
	}
}


cModel::cModel( const char* filename )
{
	int i;

	cFile file;
	file.Open( filename );

	queue<string> m_tokens;

	file.TokenizeNextNCLine( &m_tokens, '#' );

	// first token is the name.
	m_name = m_tokens.front();
	m_tokens.pop();

	// next is the number of fields in the vertex info
	int nVertexFields = atoi( m_tokens.front().c_str() );
	m_tokens.pop();

	// next is the triangle offset
	int offset = atoi( m_tokens.front().c_str() );
	m_tokens.pop();

	// next is the number of vertices
	int nVerts = atoi( m_tokens.front().c_str() );
	m_tokens.pop();

	// next is the number of triangles
	int nTris = atoi( m_tokens.front().c_str() );
	m_tokens.pop();

	if( !m_tokens.empty() )
	{
		// additional info in the header
	}

	
	// Reserve space in the vector for all the verts.
	// This will speed up all the additions, since only
	// one resize will be done.
	m_verts.reserve( nVerts );
	for( i=0; i<nVerts; i++ )
	{
		//while( !m_tokens.empty() ) m_tokens.pop();
		file.TokenizeNextNCLine( &m_tokens, '#' );

		vertex curr;

		// Vertex data is guarenteed
		curr.loc.x = atof( m_tokens.front().c_str() );
		m_tokens.pop();
		curr.loc.y = atof( m_tokens.front().c_str() );
		m_tokens.pop();
		curr.loc.z = atof( m_tokens.front().c_str() );
		m_tokens.pop();

		// hack to load color
		if( nVertexFields == 4 )
		{
			curr.diff = atoi( m_tokens.front().c_str() );

			m_tokens.pop();
		}


		// Load normal data if nfields is 6 or 8
		if( nVertexFields == 6 || nVertexFields == 8 )
		{
			curr.norm.x = atof( m_tokens.front().c_str() );
			m_tokens.pop();
			curr.norm.y = atof( m_tokens.front().c_str() );
			m_tokens.pop();
			curr.norm.z = atof( m_tokens.front().c_str() );
			m_tokens.pop();
		}
		else
		{
			curr.norm.Assign( 0, 0, 0 );
		}

		// Load texture data if nfields is 5 or 8
		if( nVertexFields == 5 || nVertexFields == 8 )
		{
			curr.u = atof( m_tokens.front().c_str() );
			m_tokens.pop();
			curr.v = atof( m_tokens.front().c_str() );
			m_tokens.pop();
		}
		else
		{
			curr.u = 0.f;
			curr.v = 0.f;
		}

		m_verts.push_back( curr );
	}

	// Reserve space in the vector for all the verts.
	// This will speed up all the additions, since only
	// one resize will be done.
	m_tris.reserve( nTris );
	for( i=0; i<nTris; i++ )
	{
		m_tokens.empty();
		file.TokenizeNextNCLine( &m_tokens, '#' );

		sTri tri;

		// vertex data is guaranteed
		tri.v[0] = atoi( m_tokens.front().c_str() ) - offset;
		m_tokens.pop();
		tri.v[1] = atoi( m_tokens.front().c_str() ) - offset;
		m_tokens.pop();
		tri.v[2] = atoi( m_tokens.front().c_str() ) - offset;
		m_tokens.pop();

		m_tris.push_back( tri );
	}

	if( nVertexFields == 3 || nVertexFields == 4 || nVertexFields == 5 )
	{
		// Normals weren't provided.  Generate our own.

		// First set all the normals to zero.
		for( i=0; i<nVerts; i++ )
		{
			m_verts[i].norm.Assign( 0,0,0 );
		}

		// Then go through and add each triangle's normal 
		// to each of it's verts.
		for( i=0; i<nTris; i++ )
		{
			plane3 plane(
				m_verts[ m_tris[i].v[0] ].loc,
				m_verts[ m_tris[i].v[1] ].loc,
				m_verts[ m_tris[i].v[2] ].loc );

			m_verts[ m_tris[i].v[0] ].norm += plane.n;
			m_verts[ m_tris[i].v[1] ].norm += plane.n;
			m_verts[ m_tris[i].v[2] ].norm += plane.n;
		}

		// Finally normalize all of the normals
		for( i=0; i<nVerts; i++ )
		{
			m_verts[i].norm.Normalize();
		}

	}


}



void cModel::Scale( float amt )
{
	int size = m_verts.size();
	for( int i=0; i<size; i++ )
	{
		m_verts[i].loc *= amt;
	}
}


void cModel::Draw( const matrix4& mat )
{
	Graphics()->SetWorldMatrix( mat );

	Graphics()->GetDevice()->SetFVF( FVF_TYPE );

	Graphics()->GetDevice()->DrawIndexedPrimitiveUP(
		D3DPT_TRIANGLELIST,
		0,
		m_verts.size(),
		m_tris.size(),
		&m_tris[0],
		D3DFMT_INDEX16,
		&m_verts[0],
		sizeof( vertex ) );	
}


float cModel::GenRadius()
{
	float best = 0.f;
	int size = m_verts.size();
	for( int i=0; i<size; i++ )
	{
		float curr = m_verts[i].loc.Mag();
		if( curr > best )
			best = curr;
	}
	return best;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美在线视频| 国产亚洲欧美激情| 亚洲美女在线国产| 麻豆专区一区二区三区四区五区| 成人永久看片免费视频天堂| 欧美一区二区三区色| 国产欧美精品区一区二区三区 | 成+人+亚洲+综合天堂| 欧美一区国产二区| 夜夜揉揉日日人人青青一国产精品| 久久99精品久久久久| 欧美日韩高清一区二区三区| 国产精品色一区二区三区| 奇米在线7777在线精品| 欧美在线免费播放| 中文字幕精品—区二区四季| 久久99国内精品| 欧美日韩一区二区在线观看视频| 亚洲精品在线观看视频| 琪琪一区二区三区| 欧美日韩亚洲综合一区| 亚洲男人的天堂网| 国产91丝袜在线播放九色| 5566中文字幕一区二区电影| 亚洲精品国产视频| 丁香桃色午夜亚洲一区二区三区| 日韩欧美国产综合在线一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 国产不卡视频在线播放| 久久精品一二三| 久草中文综合在线| 日韩欧美在线不卡| 三级不卡在线观看| 欧美午夜精品一区二区三区| 一区二区三区自拍| 99久久精品99国产精品| 国产精品毛片久久久久久久| 国产精品一区二区果冻传媒| 精品免费一区二区三区| 狠狠色狠狠色综合系列| 欧美sm美女调教| 久久99久久99| 日韩三级视频在线看| 看电影不卡的网站| 日韩精品在线一区二区| 日韩和欧美一区二区三区| 51午夜精品国产| 午夜精品影院在线观看| 欧美日韩成人一区| 丝袜美腿亚洲一区| 欧美亚洲一区二区在线| 亚洲一级二级三级在线免费观看| 色综合久久天天| 亚洲午夜日本在线观看| 欧美体内she精高潮| 日本一二三四高清不卡| 97久久超碰精品国产| 国产精品理论片| 色婷婷国产精品| 亚洲精品乱码久久久久久日本蜜臀| 国产成人av电影在线播放| 欧美国产丝袜视频| 国产高清无密码一区二区三区| 日本一区二区动态图| 99久久婷婷国产综合精品 | 欧美精品久久久久久久多人混战| 一区二区三区在线视频免费观看| 777亚洲妇女| 蜜桃视频在线一区| 久久尤物电影视频在线观看| 波多野结衣在线一区| 亚洲欧洲精品一区二区三区 | 国产成人精品免费看| 国产日产亚洲精品系列| 蜜桃精品在线观看| 国产免费成人在线视频| 91在线视频在线| 午夜精品成人在线视频| 欧美一区二区视频在线观看2020| 久久99久久99小草精品免视看| 久久久久久夜精品精品免费| 国产精品99久| 精品久久久久久亚洲综合网| 国产精华液一区二区三区| 亚洲天堂2016| 欧美日韩激情在线| 亚洲国产一区视频| 久久久精品综合| 91女人视频在线观看| 麻豆精品在线看| 中文字幕精品三区| 欧美丰满嫩嫩电影| 国产在线一区二区综合免费视频| 欧美videossexotv100| 成人99免费视频| 亚洲第一在线综合网站| 欧美mv日韩mv| 99精品欧美一区二区三区小说| 亚洲午夜精品在线| 国产日韩欧美制服另类| 欧美少妇bbb| 日韩理论片中文av| 精品久久国产97色综合| 99国产精品一区| 激情五月婷婷综合| 亚洲免费观看高清完整版在线| 日韩一级片网站| 91在线你懂得| 韩国女主播成人在线| 亚洲精品视频在线观看免费| 欧美人牲a欧美精品| 成+人+亚洲+综合天堂| 日本中文一区二区三区| 一区在线中文字幕| 日韩午夜在线影院| 欧美在线一区二区| 顶级嫩模精品视频在线看| 日本视频一区二区| 亚洲欧美一区二区视频| 日韩小视频在线观看专区| 欧美亚洲综合网| 国产成人一区在线| 蜜乳av一区二区| 亚洲精品久久嫩草网站秘色| 久久精品一区蜜桃臀影院| 欧美日韩国产美女| 国产黄色成人av| 免费黄网站欧美| 亚洲综合视频网| 自拍av一区二区三区| 欧美成人三级在线| 欧美人牲a欧美精品| 91麻豆免费视频| 成人免费看黄yyy456| 卡一卡二国产精品 | 韩国一区二区三区| 亚洲图片欧美视频| 日韩理论片中文av| 久久影视一区二区| 欧美一区二区精美| 91福利视频在线| 色婷婷综合久久久中文一区二区| 国产精品一区二区三区四区| 国产原创一区二区| 蜜臀av性久久久久蜜臀aⅴ | 亚洲国产精品激情在线观看| 久久奇米777| 欧美一区二区三区日韩视频| 91麻豆精品国产自产在线| 色欧美88888久久久久久影院| 99免费精品视频| www.性欧美| 国产综合久久久久久久久久久久| 久久精品久久精品| 青草av.久久免费一区| 亚洲成av人片在www色猫咪| 亚洲精品国产a久久久久久| 国产亚洲一区字幕| 久久综合久久综合九色| 欧美一级片在线看| 在线成人av影院| 欧美一区二区三区影视| 7777精品久久久大香线蕉| 在线91免费看| 欧美久久久久免费| 91精品国产欧美一区二区| 91精品国产综合久久久久久久| 91.成人天堂一区| 欧美美女网站色| 色香蕉久久蜜桃| 欧美日韩一区二区三区高清| 在线这里只有精品| 欧美精品成人一区二区三区四区| 欧美在线你懂的| 欧美一级xxx| 欧美一区二区三区男人的天堂| 欧美大黄免费观看| 精品久久久久一区二区国产| 911国产精品| 久久综合色鬼综合色| 日韩视频一区二区在线观看| 久久精品一区二区三区四区| 国产欧美日韩中文久久| 亚洲欧美日韩中文播放 | 欧美一区二区三区四区在线观看 | 九色综合狠狠综合久久| 久久国产精品免费| 久久精品理论片| caoporn国产精品| 99久久婷婷国产| 51精品久久久久久久蜜臀| 欧美一区二区三区男人的天堂| 国产三区在线成人av| 日本一二三不卡| 午夜精品福利一区二区蜜股av| 美女性感视频久久| jlzzjlzz欧美大全| 欧美性videosxxxxx| 亚洲精品一线二线三线| 国产精品美女视频|