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

📄 effectmesh.cpp

📁 国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国内还没有,所以找不到测试
💻 CPP
字号:
// EffectMesh.cpp: implementation of the CEffectMesh class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EffectMesh.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CEffectMesh::CEffectMesh()
{
	m_pMCTexture = NULL;
	m_pMaterials = NULL;
	m_pVertexBuffer = NULL;
	m_pIndexBuffer = NULL;
	m_pTexture = NULL;
}

CEffectMesh::~CEffectMesh()
{
	SAFE_DELETE_ARRAY(m_pVertex);
	SAFE_DELETE_ARRAY(m_nFace);
	SAFE_DELETE_ARRAY(m_nTexIndex);
	SAFE_DELETE_ARRAY(m_pMCTexture);
	SAFE_DELETE_ARRAY( m_pMaterials );

	SAFE_RELEASE(m_pVertexBuffer);
	SAFE_RELEASE(m_pIndexBuffer);
	SAFE_RELEASE(m_pTexture);
//	m_pTexture = NULL;
}

void CEffectMesh::AddTexture( MCTEXTURE * pTexture, int nCount )
{
	if(!m_pMCTexture)
	{
		m_pMCTexture = new MCTEXTURE*[m_nTexCount];
		m_pMaterials = new D3DMATERIAL9[m_nTexCount];
	}
	m_pMCTexture[nCount] = pTexture;
	ZeroMemory( &m_pMaterials[nCount], sizeof(D3DMATERIAL9) );
	m_pMaterials[nCount].Diffuse.r = m_pMaterials[nCount].Ambient.r = 1.0f;
	m_pMaterials[nCount].Diffuse.g = m_pMaterials[nCount].Ambient.g = 1.0f;
	m_pMaterials[nCount].Diffuse.b = m_pMaterials[nCount].Ambient.b = 1.0f;
	m_pMaterials[nCount].Diffuse.a = m_pMaterials[nCount].Ambient.a = 1.0f;
}

HRESULT CEffectMesh::CreateVertexIndexBuffer()
{
	//------------------------------------------------------------------------------------------//
	// Index Buffer
	//------------------------------------------------------------------------------------------//
	if(FAILED( g_pApp->GetD3dDevice()->CreateIndexBuffer( m_nFaceCount * sizeof(WORD)*3,
												D3DUSAGE_DYNAMIC|D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,
												D3DPOOL_DEFAULT, &m_pIndexBuffer,NULL)))
	{
		OutputDebugString("[角菩] CMD3Mesh::CreateIndexBuffer");
		return E_FAIL;
	}
	
	WORD *pIndices=NULL;
	if( FAILED( m_pIndexBuffer->Lock(0,0, (void **)&pIndices, D3DLOCK_DISCARD) ))
	{
		return E_FAIL;
	}

	for(int i=0; i<m_nFaceCount; i++)
	{
		for(int j=0; j<3; j++)
			pIndices[(i*3)+j] = (WORD)m_nFace[(i*3)+abs(j)];
	}

	m_pIndexBuffer->Unlock();

	if(FAILED( g_pApp->GetD3dDevice()->CreateVertexBuffer(m_nVertexCount * sizeof(MCFVFVERTEX),
									D3DUSAGE_DYNAMIC|D3DUSAGE_WRITEONLY,
									MC3FVF_VERTEX,D3DPOOL_DEFAULT, &m_pVertexBuffer, NULL) ))
	{
		OutputDebugString("[角菩] CMD3Mesh::CreateVertexBuffer");
		return E_FAIL;
	}

	D3DFVFVERTEX *pVertex=NULL;
	if( FAILED( m_pVertexBuffer->Lock(0,0, (void **)&pVertex, D3DLOCK_DISCARD) ))
		return E_FAIL;

	for( i=0; i<m_nVertexCount; i++)
	{
		pVertex[i].vVector = m_pVertex[i].vVector;
		pVertex[i].vNoraml = m_pVertex[i].vNoraml;
		pVertex[i].Tex = m_pVertex[i].Tex;
	}
	
	if( FAILED( m_pVertexBuffer->Unlock() ) )
		return E_FAIL;

	return S_OK;
}

HRESULT CEffectMesh::ReleaseVertexIndex()
{
	SAFE_RELEASE(m_pVertexBuffer);
	SAFE_RELEASE(m_pIndexBuffer);
	return S_OK;
}

HRESULT	CEffectMesh::GetVertexData( MCFVFVERTEX ** pVertex, int * nVertexCount )
{
	*pVertex = m_pVertex;
	nVertexCount = &m_nVertexCount;
	return S_OK;
}

HRESULT CEffectMesh::Render( BYTE nAlpha )		// 舅颇 喉坊爹 贸府..
{
	if(m_pMCTexture)
	{
		for( int i=0; i<m_nTexCount; i++)
		{
			if(FAILED( g_pApp->GetD3dDevice()->SetTexture(i,m_pMCTexture[i]->pTexture) ))
			{
				OutputDebugString("[Failed] CMD3Mesh::Render / SetTexture \n");
				return E_FAIL;
			}
		}
	}else if(m_pTexture) {
		for( int i=0; i<m_nTexCount; i++)
		{
			if(FAILED( g_pApp->GetD3dDevice()->SetTexture(i, m_pTexture) ))
			{
				OutputDebugString("[Failed] CMD3Mesh::Render / SetTexture \n");
				return E_FAIL;
			}
		}
		
	}else{
//		for( int i=0; i<m_nTexCount; i++)
//			g_pApp->GetD3dDevice()->SetTexture(i,NULL);
	}
	
	g_pApp->GetD3dDevice()->SetStreamSource(0,m_pVertexBuffer,0,sizeof(MCFVFVERTEX) );
	g_pApp->GetD3dDevice()->SetFVF(MC3FVF_VERTEX);
	g_pApp->GetD3dDevice()->SetIndices(m_pIndexBuffer);
	g_pApp->GetD3dDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0, m_nVertexCount,0,m_nFaceCount);

	return S_OK;
}

⌨️ 快捷键说明

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