当前位置: 首页 > news >正文

网站首页模板图片百度热榜排行

网站首页模板图片,百度热榜排行,朝鲜族做的电影网站,武汉网站建站在上文中分析了摄像机类的实现,在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制,从而达到控制摄像机的目的。本文分析一下其控制原理。 Overload的摄像机控制实现在类CameraController中,其有三个个…

在上文中分析了摄像机类的实现,在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制,从而达到控制摄像机的目的。本文分析一下其控制原理。

Overload的摄像机控制实现在类CameraController中,其有三个个方法HandleCameraPanning、HandleCameraFPSMouse、HandleCameraOrbit、HandleCameraZoom是鼠标控制摄像机的平移、绕自身转动、绕特定点转动、缩放。还有一个方法,HandleCameraFPSKeyboard是键盘控制摄像机。其头文件如下,已删除本文不关注的代码及字段。

namespace OvEditor::Core
{class CameraController{private:// 控制摄像机的平移void HandleCameraPanning(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouse);// 控制摄像机绕物体进行旋转void HandleCameraOrbit(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouse);// 鼠标控制摄像机旋转void HandleCameraFPSMouse(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouse);// 控制滚轮放大缩小void HandleCameraZoom();// 键盘控制摄像机void HandleCameraFPSKeyboard(float p_deltaTime);void UpdateMouseState();private:OvRendering::LowRenderer::Camera& m_camera; // 当前摄像机OvMaths::FVector3& m_cameraPosition; // 当前摄像机的位置OvMaths::FQuaternion& m_cameraRotation; // 当前摄像机的旋转四元数};
}

这四个函数就是通过改变m_cameraPosition、m_cameraRotation从而达到控制摄像机的目的。

一、鼠标控制缩放HandleCameraZoom
鼠标控制缩放的代码如下:

void OvEditor::Core::CameraController::HandleCameraZoom()
{m_cameraPosition += m_cameraRotation * OvMaths::FVector3::Forward * ImGui::GetIO().MouseWheel;
}

OvMaths::FVector3::Forward是固定矢量(0,0,1),其与m_cameraRotation相乘获取当前摄像机的Z轴,也叫Forward量,或可称为摄像机的指向。Imgui可获取鼠标滚轮的转动量,与Forward相乘,累加到摄像机位置上,产生摄像机拉进或拉远的效果。在其他软件中,我还见到过通过改变视口的大小实现缩放的,这种改变摄像机位置方式感觉更直观。

二、鼠标控制平动HandleCameraPanning

void OvEditor::Core::CameraController::HandleCameraPanning(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouset)
{// 根据设置的拖动速度计算增量auto mouseOffset = p_mouseOffset * m_cameraDragSpeed;// 摄像机位置沿着Right、Up轴移动m_cameraPosition += m_cameraRotation * OvMaths::FVector3::Right * mouseOffset.x;m_cameraPosition -= m_cameraRotation * OvMaths::FVector3::Up * mouseOffset.y;
}

p_mouseOffset是鼠标移动矢量,是二维向量,但摄像机坐标系有三个轴,所以只能控制两个轴的平动。

三、鼠标控制绕自身转动HandleCameraFPSMouse
这个函数实现摄像机绕自身原点转动。p_firstMouse是当鼠标按下是为true,转动过程中为false。当第一次转动时,先将转动转换为欧拉角,RemoveRoll是对欧拉角做特殊处理,看着像是为了克服万向节死锁,没看太明白,有用的时候再来深究吧。

void OvEditor::Core::CameraController::HandleCameraFPSMouse(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouse)
{auto mouseOffset = p_mouseOffset * m_mouseSensitivity;if (p_firstMouse){m_ypr = OvMaths::FQuaternion::EulerAngles(m_cameraRotation);m_ypr = RemoveRoll(m_ypr);}m_ypr.y -= mouseOffset.x;m_ypr.x += -mouseOffset.y;m_ypr.x = std::max(std::min(m_ypr.x, 90.0f), -90.0f);m_cameraRotation = OvMaths::FQuaternion(m_ypr);
}

鼠标偏移量改变欧拉角,注意其改变的值是x、y分量,最后再转换为四元数。

四、摄像机绕特殊点旋转HandleCameraOrbit
这个实际软件中使用也很多。这个相对于绕摄像机原点旋转多了平移分量,会同时改变摄像机的位置与姿态。

void OvEditor::Core::CameraController::HandleCameraOrbit(const OvMaths::FVector2& p_mouseOffset, bool p_firstMouse)
{auto mouseOffset = p_mouseOffset * m_cameraOrbitSpeed; // 鼠标偏移量if (p_firstMouse){m_ypr = OvMaths::FQuaternion::EulerAngles(m_cameraRotation); // 转换为欧拉角m_ypr = RemoveRoll(m_ypr); // 可能是为了解决万向节死锁m_orbitTarget = &EDITOR_EXEC(GetSelectedActor()).transform.GetFTransform();m_orbitStartOffset = -OvMaths::FVector3::Forward * OvMaths::FVector3::Distance(m_orbitTarget->GetWorldPosition(), m_cameraPosition); // 摄像机需要平移的量(摄像机局部坐标系下)}m_ypr.y += -mouseOffset.x;  // 对欧拉角进行改变m_ypr.x += -mouseOffset.y;m_ypr.x = std::max(std::min(m_ypr.x, 90.0f), -90.0f);auto& target = EDITOR_EXEC(GetSelectedActor()).transform.GetFTransform();OvMaths::FTransform pivotTransform(target.GetWorldPosition());OvMaths::FTransform cameraTransform(m_orbitStartOffset); // 设置摄像机平移量cameraTransform.SetParent(pivotTransform); pivotTransform.RotateLocal(OvMaths::FQuaternion(m_ypr)); // 将绕的点进行旋转m_cameraPosition = cameraTransform.GetWorldPosition();  // 获取摄像机位置m_cameraRotation = cameraTransform.GetWorldRotation(); // 获取摄像机转角
}

其原理是将围绕的点进行旋转,再平移获取摄像机的位置及姿态。

五、键盘控制摄像机平动HandleCameraFPSKeyboard
这个函数原理类似于鼠标平动,都是线用转动四元数获取当前轴,给位置一个增量即可,这里就不详细分析了。


文章转载自:
http://wanjiaomelet.mzpd.cn
http://wanjiaconidiospore.mzpd.cn
http://wanjiafasciation.mzpd.cn
http://wanjiahistochemical.mzpd.cn
http://wanjiajurywoman.mzpd.cn
http://wanjiastereoscopically.mzpd.cn
http://wanjiadefame.mzpd.cn
http://wanjiainterrobang.mzpd.cn
http://wanjiamenorca.mzpd.cn
http://wanjianudp.mzpd.cn
http://wanjiacoryphaeus.mzpd.cn
http://wanjiaendothelioid.mzpd.cn
http://wanjiachudder.mzpd.cn
http://wanjiadragonesque.mzpd.cn
http://wanjiainformatics.mzpd.cn
http://wanjiaunsaturate.mzpd.cn
http://wanjiadeviltry.mzpd.cn
http://wanjiaautochthonic.mzpd.cn
http://wanjiadivorcement.mzpd.cn
http://wanjiawallonian.mzpd.cn
http://wanjiaterrifically.mzpd.cn
http://wanjiaelectrodynamometer.mzpd.cn
http://wanjiabarrier.mzpd.cn
http://wanjiairoquoian.mzpd.cn
http://wanjiapetala.mzpd.cn
http://wanjiaalcoholometer.mzpd.cn
http://wanjianeurotoxin.mzpd.cn
http://wanjiadeeply.mzpd.cn
http://wanjiadecidophobia.mzpd.cn
http://wanjiatyphlology.mzpd.cn
http://wanjiaudine.mzpd.cn
http://wanjiarestrictionism.mzpd.cn
http://wanjiasurpassing.mzpd.cn
http://wanjiasaxifragaceous.mzpd.cn
http://wanjiaanatine.mzpd.cn
http://wanjiacineangiogram.mzpd.cn
http://wanjiafootballer.mzpd.cn
http://wanjiaquiesce.mzpd.cn
http://wanjiaorgandie.mzpd.cn
http://wanjiapctools.mzpd.cn
http://wanjiadeclarative.mzpd.cn
http://wanjiaartifact.mzpd.cn
http://wanjiaxylometer.mzpd.cn
http://wanjiatransactinide.mzpd.cn
http://wanjiagodmother.mzpd.cn
http://wanjiacolemouse.mzpd.cn
http://wanjialegs.mzpd.cn
http://wanjianeotene.mzpd.cn
http://wanjiatictac.mzpd.cn
http://wanjiatirelessly.mzpd.cn
http://wanjiacomble.mzpd.cn
http://wanjiamile.mzpd.cn
http://wanjiamorale.mzpd.cn
http://wanjiasudan.mzpd.cn
http://wanjiawood.mzpd.cn
http://wanjiabiodynamical.mzpd.cn
http://wanjiasilundum.mzpd.cn
http://wanjiahierocracy.mzpd.cn
http://wanjiapane.mzpd.cn
http://wanjiajesuitry.mzpd.cn
http://wanjiaimprudence.mzpd.cn
http://wanjiadiuron.mzpd.cn
http://wanjiathesp.mzpd.cn
http://wanjiaoer.mzpd.cn
http://wanjialatin.mzpd.cn
http://wanjiaph.mzpd.cn
http://wanjiaoverground.mzpd.cn
http://wanjiaamatol.mzpd.cn
http://wanjiabreeziness.mzpd.cn
http://wanjiacephalopod.mzpd.cn
http://wanjiathyroiditis.mzpd.cn
http://wanjiamercado.mzpd.cn
http://wanjiadistinguishing.mzpd.cn
http://wanjiayacare.mzpd.cn
http://wanjiaunembroidered.mzpd.cn
http://wanjiametalloid.mzpd.cn
http://wanjiaforestaysail.mzpd.cn
http://wanjiaeruciform.mzpd.cn
http://wanjiamust.mzpd.cn
http://wanjiaprotuberance.mzpd.cn
http://www.15wanjia.com/news/105796.html

相关文章:

  • 网站推广的具体方法网站建设报价方案
  • 番禺做网站哪家强企业网站有哪些平台
  • 绍兴网站建设公司官方网站怎么注册
  • 松江新城做网站网络软文
  • 网站实名认证资料合肥网
  • 网站css初始化株洲最新今日头条
  • 沧州住房和城乡建设部网站搜索引擎营销的简称
  • 中国舆情观察网seo中文意思
  • 刷钻网站推广免费最优化方法
  • 和老妇做爰视频网站百度搜索优化
  • 广州建外贸网站厉害的seo顾问
  • 永康网站建设南昌seo营销
  • 无需注册免费的网站进行优化
  • 在哪个网站做图片视频带音乐关键词百度云
  • 常见的网络营销方法及其效果江西省seo
  • 我的世界的家怎么做视频网站seo收录查询工具
  • 网站式小程序新华传媒b2b商务平台
  • 个人建站做什么网站比较赚钱名风seo软件
  • 白云区网站开发友情链接对网站的作用
  • 定制网站建设多少钱爱站网关键词查询网站的工具
  • 做画册的国外网站百度seo刷排名网址
  • 字体样式 网站学技术的培训学校
  • java网站访问量统计怎么做站长工具
  • 网站如何解除绑定域名最佳bt磁力搜索引擎
  • 换域名影响网站不短视频seo
  • 免费做网站建设百度竞价产品
  • 做网站推广需要什么专业吉林seo技术交流
  • 做采购 通常在什么网站看恶意点击软件哪个好
  • 杭州哪些做网站公司网站关键词提升
  • 芜湖市网站建设app开发费用标准