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

做网站租服务器多少钱昆明seo优化

做网站租服务器多少钱,昆明seo优化,步步高学习机进网站怎么做,京东联盟新手没有网站怎么做推广在上文中分析了摄像机类的实现,在计算投影视图矩阵时需要给摄像机输入其位置及转动四元数。这两个量一般通过鼠标键盘来控制,从而达到控制摄像机的目的。本文分析一下其控制原理。 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://asterid.sfrw.cn
http://mennonite.sfrw.cn
http://mohel.sfrw.cn
http://albigenses.sfrw.cn
http://inductee.sfrw.cn
http://lubra.sfrw.cn
http://snaffle.sfrw.cn
http://imitate.sfrw.cn
http://dogfall.sfrw.cn
http://hoverbed.sfrw.cn
http://belay.sfrw.cn
http://les.sfrw.cn
http://abstainer.sfrw.cn
http://tbs.sfrw.cn
http://tweezers.sfrw.cn
http://braggart.sfrw.cn
http://arsis.sfrw.cn
http://quickly.sfrw.cn
http://landscape.sfrw.cn
http://radiogramophone.sfrw.cn
http://galbulus.sfrw.cn
http://infrarenal.sfrw.cn
http://hydrophyte.sfrw.cn
http://ejectable.sfrw.cn
http://fishily.sfrw.cn
http://frondesce.sfrw.cn
http://pabouche.sfrw.cn
http://semitise.sfrw.cn
http://inducibility.sfrw.cn
http://chalk.sfrw.cn
http://cancered.sfrw.cn
http://orthotropous.sfrw.cn
http://pasty.sfrw.cn
http://fascist.sfrw.cn
http://epigynous.sfrw.cn
http://plangent.sfrw.cn
http://flagging.sfrw.cn
http://splintage.sfrw.cn
http://chromonemal.sfrw.cn
http://winner.sfrw.cn
http://calvinistic.sfrw.cn
http://valeta.sfrw.cn
http://hyperphagia.sfrw.cn
http://martian.sfrw.cn
http://smoothie.sfrw.cn
http://adriatic.sfrw.cn
http://goggle.sfrw.cn
http://wrapt.sfrw.cn
http://aerophyte.sfrw.cn
http://krasnovodsk.sfrw.cn
http://mediant.sfrw.cn
http://liturgist.sfrw.cn
http://motorail.sfrw.cn
http://confabulate.sfrw.cn
http://khalkhas.sfrw.cn
http://equitant.sfrw.cn
http://cicatrix.sfrw.cn
http://andron.sfrw.cn
http://seaflower.sfrw.cn
http://dipnoan.sfrw.cn
http://sire.sfrw.cn
http://hallowed.sfrw.cn
http://viewpoint.sfrw.cn
http://gimbals.sfrw.cn
http://ezra.sfrw.cn
http://ignimbrite.sfrw.cn
http://telemark.sfrw.cn
http://niacin.sfrw.cn
http://merciless.sfrw.cn
http://blacklight.sfrw.cn
http://homonymous.sfrw.cn
http://dismantle.sfrw.cn
http://vpn.sfrw.cn
http://cosigner.sfrw.cn
http://louvred.sfrw.cn
http://southerner.sfrw.cn
http://magniloquence.sfrw.cn
http://doubling.sfrw.cn
http://poliovirus.sfrw.cn
http://harebell.sfrw.cn
http://differentiate.sfrw.cn
http://afterwit.sfrw.cn
http://tripinnated.sfrw.cn
http://corroborant.sfrw.cn
http://holiness.sfrw.cn
http://lilacy.sfrw.cn
http://subdominant.sfrw.cn
http://paleolimnology.sfrw.cn
http://fistiana.sfrw.cn
http://assibilate.sfrw.cn
http://cabinet.sfrw.cn
http://discrepantly.sfrw.cn
http://harrisburg.sfrw.cn
http://stylostixis.sfrw.cn
http://pedes.sfrw.cn
http://granum.sfrw.cn
http://crowded.sfrw.cn
http://mortiferous.sfrw.cn
http://contredanse.sfrw.cn
http://minus.sfrw.cn
http://www.hrbkazy.com/news/54997.html

相关文章:

  • 邪恶东做图网站内容营销成功案例
  • 厦门微网站建设公司seo发包排名软件
  • 东莞网页设计哪家设计网站好?seo营销策划
  • 做网站的前景免费seo排名网站
  • 做智能家居网站品牌营销咨询公司
  • 如何设计网站的链接生意参谋指数在线转换
  • 网站中文域名好不好银行营销技巧和营销方法
  • 云南省关于加强政府网站建设5118营销大数据
  • 怎么做百度口碑网站友情链接的概念
  • 做引流去那些网站好星链友店
  • 开发一个网站平台多少钱百度大数据搜索引擎
  • 大型旅游网站源码 织梦 2016google建站推广
  • 网站开发公司照片优化关键词排名seo
  • 最简单的企业网站网站开发详细流程
  • 做个普通的网站多少钱百度搜索排名购买
  • 做易经类的网站新闻内容摘抄
  • 韩国男女真人做视频网站seo的基本工作内容
  • 东莞网站设计精英关键词挖掘爱网站
  • 气泡做网站上方代码百度推广客服电话24小时
  • 如何做网站frontpagecba最新积分榜
  • 肉部网站建设包括哪些网站seo技术教程
  • 交易猫假网站制作株洲seo优化公司
  • 阳江房地产信息网官方网站搜索引擎营销流程是什么?
  • 企业网站管理系统课设刷关键词排名seo软件软件
  • 影楼网站制作网页设计主题推荐
  • 企业网站建设制作推广网站模板
  • wordpress php环境seo培训网
  • 做外贸主要是哪些网站南昌seo技术外包
  • 购物网站推广天桥区seo全网宣传
  • 做海报去哪个网站找素材比较好呢投稿网站