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

网站开发者取色工具高端产品网站

网站开发者取色工具,高端产品网站,电子商务网站建设结业论文,建立的含义在上文中分析了摄像机类的实现#xff0c;在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制#xff0c;从而达到控制摄像机的目的。本文分析一下其控制原理。 Overload的摄像机控制实现在类CameraController中#xff0c;其有三个个… 在上文中分析了摄像机类的实现在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制从而达到控制摄像机的目的。本文分析一下其控制原理。 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); }鼠标偏移量改变欧拉角最后再转换为四元数。 四、摄像机绕特殊点旋转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://www.yutouwan.com/news/33466/

相关文章:

  • 网站建设项目资金申请报告钓鱼网站到底怎么做
  • 天气预报网站开发aspcms 网站栏目管理
  • 签名设计在线企业seo网络推广
  • 网站开发环境准备免费建站软件排行榜
  • 外国网站 游戏设定图知乎seo排名帝搜软件
  • 长兴网站建设公司如何做一个网站代码
  • 怎么修改网站模版保定关键词优化平台
  • 河北建设工程信息网已取消谷歌关键词排名优化
  • 在线网站免费没备案的网站怎么做淘客
  • 拦截网站做跳转做收益的网站多少钱
  • php网站开发工资多少钱电子商务网站建设收获
  • 网站分为几种可以自己设计装修的免费软件
  • 购物网站数据分析如何在相关网站免费做宣传广告
  • 海口网站建设推广网络规划设计师教程第2版pdf下载
  • 合肥建设工程信息网站wordpress首页最新文章
  • 重庆网站维护2022双11各大电商平台销售数据
  • 寿光做网站的公司长沙短视频制作
  • 重庆微网站app软件开发学什么专业
  • 网页前端工程师石家庄seo网络优化的公司
  • 展示营销型网站广州市番禺人才网
  • 申请域名流程后怎样做网站郑州团购网站建设
  • 网站上如何设置行间距青岛专业网站建设推广报价
  • 动画做视频在线观看网站淄博网站制作建设
  • 网站开发工资多少稳定么阿里巴巴外贸圈论坛
  • 公司的网站建设规划书厦门seo网站优化
  • 做汽车养护的网站华秋商城官网
  • 松原市建设局网站后湖做网站
  • 新网站优化怎么做创意摄影网站
  • 如需郑州网站建设wordpress 付费
  • 卖设备用哪个网站搜索竞价