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

📄 girl.cpp

📁 自己做的一个3D场景
💻 CPP
字号:
#include <d3dx9.h>
#include "Girl.h"


Girl::~Girl()
{
	SafeRelease(m_pMesh);
	for(DWORD i=0;i<m_dwNumMaterials;i++)
	{
		SafeRelease(m_pMeshTextures[i]);

	}
	SafeDeleteArray(m_pMeshTextures);
	SafeDeleteArray(m_pMeshMaterials);
};
Girl::Girl(LPDIRECT3DDEVICE9 pDevice,char *strMesh,BOOL bOptimize)
{
    LPD3DXBUFFER pD3DXMtrlBuffer;//材质缓冲区指针

	D3DXMATERIAL *d3dxMaterials;//缓冲区中材质指针
	m_pDevice=pDevice;
    m_vPos.x=0;
	m_vPos.y=0;
	m_vPos.z=0;
	m_fAngle=0;

	LRESULT ret= D3DXLoadMeshFromX( strMesh,0, 
                                   m_pDevice, 
								   NULL, 
                                   &pD3DXMtrlBuffer, 
								   NULL,
								   &m_dwNumMaterials, 
                                   &m_pMesh ) ;

	if(ret!=D3D_OK)
	{
		MessageBox(NULL,"加载girl模型失败!\n可能是文件名或路径错误。",strMesh,	MB_OK|MB_ICONERROR);
		return;
	}
	d3dxMaterials=(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();//获取材质地址

	m_pMeshMaterials=new D3DMATERIAL9[m_dwNumMaterials];
	m_pMeshTextures=new LPDIRECT3DTEXTURE9[m_dwNumMaterials];

	for(DWORD i=0;i<m_dwNumMaterials;i++)
	{
		m_pMeshMaterials[i]=d3dxMaterials[i].MatD3D;//从缓冲区中拷贝材质
        m_pMeshMaterials[i].Ambient=m_pMeshMaterials[i].Diffuse;//设置环境光属性
		
		if(FAILED(D3DXCreateTextureFromFile(m_pDevice,
			                                d3dxMaterials[i].pTextureFilename,
											&m_pMeshTextures[i])))
		{
			m_pMeshTextures[i]=NULL;
				MessageBox(NULL,"加载girl Textures失败!\n可能是文件名或路径错误。",strMesh,MB_OK|MB_ICONERROR);
		}

	}

    if(pD3DXMtrlBuffer)//释放材质缓冲区
		pD3DXMtrlBuffer->Release();
	    pD3DXMtrlBuffer=NULL;
	

    //计算方盒
	D3DXVECTOR3 *pVertices;
	m_pMesh->LockVertexBuffer(0,(void**)&pVertices);
	D3DXComputeBoundingBox(
		                   pVertices,
						   m_pMesh->GetNumVertices(),
						   m_pMesh->GetNumBytesPerVertex(),
						   &m_vMin,
						   &m_vMax);
	m_pMesh->UnlockVertexBuffer();

};
/*
Girl::SetPosition ()
{
    
}
*/
void Girl::Render(float x,float y,float z)
{
    D3DXMATRIX matWorld,matWorldY,matTrans,matScla;

    D3DXMatrixIdentity(&matWorld);//?
	
	//D3DXMatrixScaling(&matScla,10,10,10);//缩放变换x,y,z
	
    //D3DXMatrixMultiply(&matWorld,&matWorld,&matScla);


		D3DXMatrixTranslation(&matTrans,0+x,70+y,100+z);
        D3DXMatrixMultiply(&matWorld,&matWorld,&matTrans);//组合变换
	    
   D3DXMatrixRotationY(&matWorldY,y);
   D3DXMatrixMultiply(&matWorld,&matWorld,&matWorldY);
	m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);

	for(DWORD i=0;i<m_dwNumMaterials;i++)
	{
		m_pDevice->SetMaterial(&m_pMeshMaterials[i]);
		m_pDevice->SetTexture(i,m_pMeshTextures[i]);
		m_pMesh->DrawSubset(i);
	}
};
/*
	        case VK_LEFT:
					  g_Angle-=0.01f;
                      g_Control.LookAt[1].x = g_Control.LookAt[0].x+sinf(g_Angle);
                      g_Control.LookAt[1].z = g_Control.LookAt[0].z+cosf(g_Angle);
					  break;
		    case VK_RIGHT:
					  g_Angle+=0.01f;
                      g_Control.LookAt[1].x = g_Control.LookAt[0].x+sinf(g_Angle);
                      g_Control.LookAt[1].z = g_Control.LookAt[0].z+cosf(g_Angle);
					 break;
            case VK_UP:
					  g_Control.LookAt[0].x = g_Control.LookAt[0].x+sinf(g_Angle)/20;
                      g_Control.LookAt[0].z = g_Control.LookAt[0].z+cosf(g_Angle)/20;
		              g_Control.LookAt[1].x = g_Control.LookAt[1].x+sinf(g_Angle)/20;
                      g_Control.LookAt[1].z = g_Control.LookAt[1].z+cosf(g_Angle)/20;

	   // g_lightPosition.x = g_lightPosition.x+sinf(g_Angle)/20;
        //g_lightPosition.z = g_lightPosition.z+cosf(g_Angle)/20;

					 break;
            case VK_DOWN:
					  g_Control.LookAt[0].x = g_Control.LookAt[0].x-sinf(g_Angle)/20;
                      g_Control.LookAt[0].z = g_Control.LookAt[0].z-cosf(g_Angle)/20;
		              g_Control.LookAt[1].x = g_Control.LookAt[1].x-sinf(g_Angle)/20;
                      g_Control.LookAt[1].z = g_Control.LookAt[1].z-cosf(g_Angle)/20;
         //g_lightPosition.x = g_lightPosition.x - sinf(g_Angle)/20;
		//g_lightPosition.z = g_lightPosition.z-cosf(g_Angle)/20;
					  break;
					  */

⌨️ 快捷键说明

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