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

📄 d3dcamera.cpp

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

#include "stdafx.h"

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

//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
CMCGCamera::CMCGCamera()
{
    // Set attributes for the view matrix
	D3DXVECTOR3 vEyePt(0.0f,0.0f,0.0f);
	D3DXVECTOR3 vLookatPt(0.0f,0.0f,1.0f);
	D3DXVECTOR3 vUpVec(0.0f,1.0f,0.0f);

	D3DXMatrixIdentity( &m_matView );
	D3DXMatrixIdentity( &m_matBillboard );

    SetViewParams( vEyePt, vLookatPt, vUpVec );
    SetProjParams( D3DX_PI/4, (float)1024/768, 1.0f, 1000.0f );

	m_fSector=0;
	//m_fFOV = D3DX_PI*0.3;
	m_fFOV = (float)(D3DX_PI*0.35);

	m_fAspect = (float)g_pApp->GetScreenWidth()/(float)g_pApp->GetScreenHeight();
}


//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
VOID CMCGCamera::SetViewParams( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt,
                                D3DXVECTOR3& vUpVec )
{
    // Set attributes for the view matrix
    m_vEyePt    = vEyePt;
    m_vLookatPt = vLookatPt;
    m_vUpVec    = vUpVec;

	//D3DXVECTOR3 Dir = m_vEyePt - m_vLookatPt;
	D3DXVECTOR3 Dir = m_vLookatPt - m_vEyePt;
	D3DXVec3Normalize(&m_vView,&Dir);

	//D3DXVec3Cross(&m_vRight,&m_vView,&m_vUpVec);
	D3DXVec3Cross(&m_vRight,&m_vUpVec,&m_vView);

	//D3DXVec3Normalize(&m_vLookatPt,&m_vLookatPt);
	//D3DXVec3Cross(&m_vRight,&m_vUpVec,&m_vLookatPt);

	D3DXMatrixLookAtLH( &m_matView, &m_vEyePt, &m_vLookatPt, &m_vUpVec );
	D3DXMatrixInverse( &m_matBillboard, NULL, &m_matView );
    m_matBillboard._41 = 0.0f;
    m_matBillboard._42 = 0.0f;
    m_matBillboard._43 = 0.0f;
}

//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
VOID CMCGCamera::SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane,
                                   FLOAT fFarPlane )
{
	//fNearPlane = 20.0f;
	
    // Set attributes for the projection matrix
	//m_fFOV        = fFOV;
    //m_fAspect     = fAspect;
    m_fNearPlane = fNearPlane;
    m_fFarPlane = fFarPlane;
	
//	m_fFOV = D3DX_PI*0.35;
	//m_fFOV = D3DX_PI/1.2f;
	//m_fFOV = D3DX_PI*0.3;

//	if(fFOV == D3DX_PI/4)		// 快急篮 捞犯霸父 贸府 窍技..
//		D3DXMatrixPerspectiveFovLH( &m_matProj, m_fFOV, m_fAspect, fNearPlane, fFarPlane );
//	else
//		D3DXMatrixPerspectiveFovLH( &m_matProj, fFOV, m_fAspect, fNearPlane, fFarPlane );
	D3DXMatrixPerspectiveFovLH( &m_matProj, fFOV, m_fAspect, fNearPlane, fFarPlane );
}

void CMCGCamera::SetView( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt, D3DXVECTOR3& vUpVec )
{
	m_vEyePt    = vEyePt;
    m_vLookatPt = vLookatPt;
    m_vUpVec    = vUpVec;
}

void CMCGCamera::Reset()
{
	m_vEyePt    = D3DXVECTOR3(0.0f,0.0f,0.0f);
    m_vLookatPt = D3DXVECTOR3(0.0f,0.0f,1.0f);
    m_vUpVec    = D3DXVECTOR3(0.0f,1.0f,0.0f);
}

D3DXMATRIXA16* CMCGCamera::RotateLocalX( float angle )
{
/*	D3DXMATRIXA16 matRot;
	D3DXMatrixRotationAxis( &matRot, &m_vRight, angle );

	D3DXVECTOR3 vNewDst;
	D3DXVec3TransformCoord( &vNewDst, &m_vView, &matRot );
	vNewDst += m_vEyePt;

	SetViewParams( m_vEyePt, vNewDst, m_vUpVec ); */

	CUtility::RotateVector(&m_vView,&m_vRight,angle);
	m_vView += m_vEyePt;

	SetViewParams( m_vEyePt, m_vView, m_vUpVec );
	return NULL;
}

D3DXMATRIXA16* CMCGCamera::RotateLocalY(float angle )
{
/*	D3DXMATRIXA16 matRot;
	D3DXMatrixRotationAxis( &matRot, &m_vUpVec, angle );

	D3DXVECTOR3 vNewDst;
	D3DXVec3TransformCoord( &vNewDst, &m_vView, &matRot );
	vNewDst += m_vEyePt;

	SetViewParams( m_vEyePt, vNewDst, m_vUpVec ); */

	CUtility::RotateVector(&m_vView,&m_vUpVec,angle);
	m_vView+= m_vEyePt;

	SetViewParams( m_vEyePt, m_vView, m_vUpVec );

	/*CUtility::printf_Debug("\n墨皋扼 轰 : %f, %f, %f",m_vView.x,m_vView.y,m_vView.z);*/

	//CUtility::printf_Debug("\n墨皋扼 扼捞飘 : %f, %f, %f",m_vRight.x,m_vRight.y,m_vRight.z);
	return NULL;
}

D3DXMATRIXA16* CMCGCamera::MoveLocalX( float dist )
{
	D3DXVECTOR3 vNewEye	= m_vEyePt;
	D3DXVECTOR3 vNewDst	= m_vLookatPt;

	D3DXVECTOR3 vMove;
	D3DXVec3Normalize( &vMove, &m_vRight );
	vMove	*= dist;
	vNewEye += vMove;
	vNewDst += vMove;

	SetViewParams( vNewEye, vNewDst, m_vUpVec );
	return NULL;
}

D3DXMATRIXA16* CMCGCamera::MoveLocalY( float dist )
{
	D3DXVECTOR3 vNewEye	= m_vEyePt;
	D3DXVECTOR3 vNewDst	= m_vLookatPt;

	D3DXVECTOR3 vMove;
	D3DXVec3Normalize( &vMove, &m_vUpVec );
	vMove	*= dist;
	vNewEye += vMove;
	vNewDst += vMove;

	SetViewParams( vNewEye, vNewDst, m_vUpVec );
	return NULL;
}

D3DXMATRIXA16* CMCGCamera::MoveLocalZ(float dist )
{
	D3DXVECTOR3 vNewEye	= m_vEyePt;
	D3DXVECTOR3 vNewDst	= m_vLookatPt;

	D3DXVECTOR3 vMove;
	D3DXVec3Normalize( &vMove, &m_vView );
	vMove	*= dist;
	vNewEye += vMove;
	vNewDst += vMove;

	SetViewParams( vNewEye, vNewDst, m_vUpVec );
	return NULL;
}

void CMCGCamera::SetLocalX( float x )
{
}

void CMCGCamera::SetLocalY( float y )
{
	m_vEyePt.y = y;
	m_vLookatPt.y = y;

	SetViewParams( m_vEyePt, m_vLookatPt, m_vUpVec );
}

void CMCGCamera::SetLocalZ( float z )
{
}

D3DXMATRIXA16* CMCGCamera::MoveTo( D3DXVECTOR3* pv )
{
	D3DXVECTOR3	dv = *pv - m_vEyePt;
	m_vEyePt = *pv;
	m_vLookatPt += dv;

	SetViewParams( m_vEyePt, m_vLookatPt, m_vUpVec );
	return NULL;
}

void CMCGCamera::PointRotateY(D3DXVECTOR3& vPos, float fDistance, float angle)
{
	D3DXMATRIXA16 matRot;
//	D3DXVECTOR3 vView = m_vView;
	D3DXMatrixRotationAxis(&matRot,&m_vUpVec,angle);
	D3DXVec3TransformCoord(&m_vRight, &m_vRight, &matRot );
	D3DXVec3TransformCoord(&m_vView,&m_vView,&matRot);
//	D3DXVec3TransformCoord(&vView,&m_vView,&matRot);

	CMCGCamera::SetPoint(vPos,fDistance);
}


void CMCGCamera::PointRotateX(D3DXVECTOR3& vPos, float fDistance, float angle)
{
	D3DXMATRIXA16 matRot;
	D3DXMatrixRotationAxis(&matRot,&m_vRight,angle);
	//D3DXVec3TransformCoord( &m_vUpVec, &m_vUpVec, &matRot );

	// 墨皋扼 阜扁~
	m_fSector+= angle;	// 墨皋扼 巨臂蔼阑 拌加 绵么~

	if(fabs(m_fSector) < D3DX_PI/3) // 绵么等 巨臂捞 3.141592/3 = (180/3=60) 焊促 累促搁
	{
		D3DXVec3TransformCoord(&m_vView,&m_vView,&matRot);	// 拌加 雀傈
	}
	else
		m_fSector-= angle;	// 雀傈 肛勉~

	CMCGCamera::SetPoint(vPos,fDistance);
}


void CMCGCamera::SetPoint(D3DXVECTOR3 vPos, float fDistance)
{
	// fDistance啊 - 甫 秒窍绰 捞蜡 : 弊成 蚌窍搁 fDistance啊 剧荐老版快 某腐磐 第率栏肺, 澜荐老版快 菊率栏肺 柯促.
	// 盔贰 墨皋扼 谅钎啊 吝痢俊辑 Z俊 - 甫 拎具 窍扁锭巩俊, 窃荐甫 荤侩且锭 墨皋扼甫 第肺 动扁绊 酵栏搁 -n
	// 菊栏肺 林绊 酵栏订 +n, 捞 谅钎拌(?)甫 嘎眠扁 困秦辑 -甫 嘿烙

//	RotateLocalY();
	if(fDistance == 0)	// fDistance捞 0老 版快 1牢莫 墨皋扼 贸烦 官诧促.-_-;;;; 0
	{					// 0捞扼搁 墨皋扼 困摹甫 vPos肺 嘎冕促.
		m_vEyePt = vPos;
		m_vLookatPt = vPos + m_vView;
	}	
	else
	{
		m_vEyePt = vPos-m_vView * (-fDistance);
		m_vLookatPt = vPos;
	}

	SetViewParams(m_vEyePt,m_vLookatPt,m_vUpVec);
}

void CMCGCamera::PointMove( D3DXVECTOR3& vDir, float fDistance )
{
	D3DXVECTOR3 vNewEye	= m_vEyePt;
	D3DXVECTOR3 vNewDst	= m_vLookatPt;

	D3DXVECTOR3 vMove;
	D3DXVec3Normalize( &vMove, &vDir );
	vMove	*= fDistance;
	vNewEye += vMove;
	vNewDst += vMove;

	SetViewParams( vNewEye, vNewDst, m_vUpVec );
}

void CMCGCamera::SetPos(D3DXVECTOR3 &vPos)
{
	SetViewParams(vPos,m_vLookatPt,m_vUpVec);
}

void CMCGCamera::CustomCamera(D3DXVECTOR3 vDir, D3DXVECTOR3 vPosPt, float angleX, float angleY )
{
	D3DXMATRIXA16 matRot;

	// y绵 雀傈
	D3DXMatrixRotationAxis(&matRot,&m_vUpVec,angleY);
	D3DXVec3TransformCoord( &m_vRight, &m_vRight, &matRot );
	D3DXVec3TransformCoord(&m_vView,&m_vView,&matRot);

	D3DXMatrixRotationAxis(&matRot,&m_vRight,angleX);
	D3DXVec3TransformCoord(&m_vView,&m_vView,&matRot);

	D3DXVec3Normalize(&vDir,&vDir);
	
	vPosPt.y += 1.0f;

	//vPosPt.y += angleX;

	m_vEyePt = vPosPt + vDir * (-3.5f);

	//D3DXVECTOR3 vEPDir = m_vEyePt - vPosPt;
	//D3DXVec3TransformCoord(&vEPDir,&vEPDir,&matRot);

	m_vLookatPt = m_vEyePt + m_vView;

	SetViewParams(m_vEyePt,m_vLookatPt,m_vUpVec);

	// x绵 雀傈
//	D3DXMatrixRotationAxis(&matRot,&vPosPt,angleX);
//	D3DXVec3TransformCoord(&m_vView,&m_vView,&matRot);

//	m_vEyePt = vPosPt - m_vView;

//	SetViewParams( m_vEyePt, m_vView, m_vUpVec );
}

⌨️ 快捷键说明

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