DirectX11 学习笔记2 - 加入关键事件 实现视角转换 旋转

本文介绍了一个基于D3DBase类实现的简单摄像头控制系统,通过键盘操作来调整摄像头的位置和旋转角度,并更新了观察矩阵和投影矩阵,使得场景渲染能够跟随摄像头的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上的程序的的基础上。在基类D3DBase添加摄像头功能

//录影机
void D3DBase::setCamera()
{
	//关键事件
	//假定A,S,D,W,Q,E,Z,X,C键被按下。动摄像机
	if(GetAsyncKeyState('W') & 0x8000)	//前
		vZ+=0.001f;
	if(GetAsyncKeyState('S') & 0x8000)	//后
		vZ-=0.001f;
	if(GetAsyncKeyState('A') & 0x8000)  //左
		vX-=0.001f; 
	if(GetAsyncKeyState('D') & 0x8000)   //右
		vX+=0.001f; 
	if(GetAsyncKeyState('Q') & 0x8000)    //上
		vY+=0.001f;
	if(GetAsyncKeyState('E') & 0x8000)    //下
		vY-=0.001f;
	//旋转
	if(GetAsyncKeyState('Z') & 0x8000)    //x轴
		rX+=0.001f;
	if(GetAsyncKeyState('X') & 0x8000)    //y轴
		rY+=0.001f;
	if(GetAsyncKeyState('C') & 0x8000)    //z轴
		rZ+=0.001f;
	// 世界矩阵
	g_World = XMMatrixIdentity();

	// 观察矩阵
	XMVECTOR Eye = XMVectorSet( 0.0f+vX, 1.0f+vY, -5.0f+vZ, 0.0f );
	XMVECTOR At = XMVectorSet( 0.0f+vX, 1.0f+vY, 0.0f, 0.0f );
	XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
	g_View = XMMatrixLookAtLH( Eye, At, Up );
	g_View*=XMMatrixRotationX(rX)*XMMatrixRotationY(rY)*XMMatrixRotationZ(rZ); 
	// 投影矩阵
	g_Projection = XMMatrixPerspectiveFovLH( XM_PIDIV2, width / (FLOAT)height, 0.01f, 100.0f );

}
下面写在类声明里面public:
D3DBase():vX(0),vY(0),vZ(0),rX(0),rY(0),rZ(0){};//初始化
float vX,vY,vZ;// 观察矩阵 Eye的坐标
	float rX,rY,rZ;// 旋转的角度

然后直接在渲染函数调用就可以

//渲染
void D3DProgam::Render()
{
	
	setCamera();//这里
	// Update our time
	static float t = 0.0f;
	if( g_driverType == D3D_DRIVER_TYPE_REFERENCE )
	{
		t += ( float )XM_PI * 0.0125f;
	}


版权声明:本文博主原创文章,博客,未经同意不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值