社区
游戏开发
帖子详情
用鼠标移动视角有延迟
sd008009
2010-03-14 07:41:25
用鼠标移动视角有延迟,我是通过两帧的鼠标位移差来确定视角的移动,而且帧数几百帧。。。怎么弄都达不到cs那种感觉。。晃动视角就跟有加速度一样为什么啊??
...全文
364
10
打赏
收藏
用鼠标移动视角有延迟
用鼠标移动视角有延迟,我是通过两帧的鼠标位移差来确定视角的移动,而且帧数几百帧。。。怎么弄都达不到cs那种感觉。。晃动视角就跟有加速度一样为什么啊??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sd008009
2010-03-15
打赏
举报
回复
xy都是long型的,我一单位化,视角直接就动不了了。。
张赐
2010-03-15
打赏
举报
回复
[Quote=引用 4 楼 sd008009 的回复:]
引用 3 楼 zhangci226 的回复:
可能是每次获得2帧得到的鼠标移动向量的大小都不一样
楼主单位化一下这个向量
float yawDifference = g_Input->GetMousePos().x - m_oldMousePos.x;
float pitchDifference = g_Input->GetMousePos().y - m_oldMousePo……
[/Quote]
你就把x,y值看成向量,然后单位化啊
sd008009
2010-03-15
打赏
举报
回复
[Quote=引用 5 楼 xingzhe2001 的回复:]
引用 4 楼 sd008009 的回复:
float yawDifference = g_Input->GetMousePos().x - m_oldMousePos.x;
float pitchDifference = g_Input->GetMousePos().y - m_oldMousePo……
yawAngle += rotatedSpeed * yawDifference;
p……
[/Quote]
加上了,时间也是按你说的那样获得的。还是有延迟,我先试了一下cs,然后又晃了一下我程序的视角,感觉很明显,就跟有加速度一样。。。。
xingzhe2001
2010-03-15
打赏
举报
回复
[Quote=引用 4 楼 sd008009 的回复:]
float yawDifference = g_Input->GetMousePos().x - m_oldMousePos.x;
float pitchDifference = g_Input->GetMousePos().y - m_oldMousePo……
yawAngle += rotatedSpeed * yawDifference;
pitchAngle += rotatedSpeed * pitchDifference;
[/Quote]
这个rotatespeed是固定的吗,如果能够根据实际的时间来变化(performance系列函数获得的精确时间),可能更平滑些?
sd008009
2010-03-15
打赏
举报
回复
[Quote=引用 3 楼 zhangci226 的回复:]
可能是每次获得2帧得到的鼠标移动向量的大小都不一样
楼主单位化一下这个向量
[/Quote]
float yawDifference = g_Input->GetMousePos().x - m_oldMousePos.x;
float pitchDifference = g_Input->GetMousePos().y - m_oldMousePos.y;
yawAngle += rotatedSpeed * yawDifference;
pitchAngle += rotatedSpeed * pitchDifference;
这是我的部分代码,这怎么单位化啊?
张赐
2010-03-15
打赏
举报
回复
可能是每次获得2帧得到的鼠标移动向量的大小都不一样
楼主单位化一下这个向量
gamemagic
2010-03-15
打赏
举报
回复
首先检查下逻辑是否有问题,然后再用API来获得鼠标坐标。千万别用消息循环来做。
xingzhe2001
2010-03-15
打赏
举报
回复
太灵敏了,只用消息循环里的鼠标信息呢,也晃么?
sd008009
2010-03-15
打赏
举报
回复
void QuaCamera::Update(float _FlapsedTime, LPARAM lParam)
{
float deltatime = _FlapsedTime*1000;
moveSpeed = 0.2f;
moveSpeed *= deltatime;
rotatedSpeed = 0.00004f;
rotatedSpeed *= deltatime;
//如果鼠标移动了 则根据鼠标移动差量计算旋转矩阵 更新view矩阵
if(m_oldMousePos.x != g_Input->GetMousePos().x ||m_oldMousePos.y != g_Input- >GetMousePos().y )
{
POINT newpos;
GetCursorPos(&newpos);
float yawDifference = newpos.x - m_oldMousePos.x;
float pitchDifference =newpos.y - m_oldMousePos.y;
yawAngle += rotatedSpeed * yawDifference;
pitchAngle += rotatedSpeed * pitchDifference;
if(pitchAngle<-D3DX_PI/2)
pitchAngle = -D3DX_PI/2;
if(pitchAngle>D3DX_PI/2)
pitchAngle = D3DX_PI/2;
//恢复鼠标位置
g_Input->SetMousePos(400,300);
//四元数计算摄像机轴的旋转
D3DXQuaternionRotationYawPitchRoll(&cameraRotation, yawAngle, pitchAngle, rollAngle);
UpdateViewMatrix();
}
//如果按下了aswd则移动相机位置 更新view矩阵
if(g_Input->KeyDown(DIK_W) && g_Input->KeyDown(DIK_A))
AddToCameraPosition(D3DXVECTOR3(-0.707107f,0.f,0.707107f));
else if(g_Input->KeyDown(DIK_W) && g_Input->KeyDown(DIK_D))
AddToCameraPosition(D3DXVECTOR3(0.707107f,0.f,0.707107f));
else if(g_Input->KeyDown(DIK_S) && g_Input->KeyDown(DIK_A))
AddToCameraPosition(D3DXVECTOR3(-0.707107f,0.f,-0.707107f));
else if(g_Input->KeyDown(DIK_S) && g_Input->KeyDown(DIK_D))
AddToCameraPosition(D3DXVECTOR3(0.707107f,0.f,-0.707107f));
else if(g_Input->KeyDown(DIK_W))
AddToCameraPosition(D3DXVECTOR3(0,0,1));
else if(g_Input->KeyDown(DIK_S))
{
AddToCameraPosition(D3DXVECTOR3(0,0,-1));
bMovedBack = true;
}
else if(g_Input->KeyDown(DIK_A))
AddToCameraPosition(D3DXVECTOR3(-1,0,0));
else if(g_Input->KeyDown(DIK_D))
AddToCameraPosition(D3DXVECTOR3(1,0,0));
GetCursorPos(&m_oldMousePos);
}
void QuaCamera::AddToCameraPosition(D3DXVECTOR3 vectorToAdd)
{
D3DXMATRIX cameraRotated;
D3DXMatrixIdentity(&cameraRotated);
D3DXMatrixRotationQuaternion(&cameraRotated,&cameraRotation);
D3DXVECTOR3 rotatedVector;
D3DXVec3TransformNormal (&rotatedVector,&vectorToAdd,&cameraRotated);
this->eye += moveSpeed * rotatedVector;
}
张赐
2010-03-15
打赏
举报
回复
看来你没有把float yawDifference ,float pitchDifference当做向量来用
UE4触摸屏,单指旋转,双指缩放,双指
移动
能够实现单指旋转双指缩放,控制相机远近,点击事件按钮,适合UE4学习触摸屏的同学,
移动
开发,或者触摸屏开发
更新了 MandelBT Explorer:优化了之前提交的代码。 代码是用 R2010b 编写的。-matlab开发
您会注意到,稍有
延迟
后,将在选择区域周围绘制一个矩形,并且程序将放大该区域。 下一步是按下选择缩放模式后出现的重新计算按钮,程序将执行 Mandelbrot 集的新计算。 图片将自动显示。 保存您的图片按图形和...
HTML 5
移动
开发从入门到精通
本课程讲述了HTML 5
移动
开发的各种技术,通过本课程的学习,用户可以掌握HTML 5
移动
开发的技巧
C#视频游戏开发系列课程(1)
我们在这讲中将介绍如何在游戏项目中创建并使用animated sprites,包括应用背景,
视角
,定义框架,框架
延迟
,透明,混合等特殊效果,还将利用这些概念执行游戏项目中的main行为和enemy行为。 推荐指数: ...
JAVA上百实例源码以及开源项目源代码
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
游戏开发
8,304
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章