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

河池市网站建设_网站建设公司_改版升级_seo优化

珠海左右创意园网站开发,爱站网工具包,天站网站建设,厦门网页建站申请费用本文只罗列公式#xff0c;不做具体的推导。 OpenGL本身没有摄像机(Camera)的概念#xff0c;但我们为了产品上的需求与编程上的方便#xff0c;一般会抽象一个摄像机组件。摄像机类似于人眼#xff0c;可以建立一个本地坐标系。相机的位置是坐标原点#xff0c;摄像机的朝… 本文只罗列公式不做具体的推导。 OpenGL本身没有摄像机(Camera)的概念但我们为了产品上的需求与编程上的方便一般会抽象一个摄像机组件。摄像机类似于人眼可以建立一个本地坐标系。相机的位置是坐标原点摄像机的朝向Forward是摄像机看的方向再给定向上的Up轴即可建立本地坐标系。然后可以通过矩阵将世界坐标系的物体变换到摄像机坐标系中这个矩阵称为视图矩阵。通过改变摄像机的本地坐标系可以产生场景漫游的效果。 1. 视图矩阵公式 视图矩阵是将物体坐标从世界空间坐标变换到相机本地坐标系中。计算视图矩阵需给定摄像机的位置 e y e \mathbf{eye} eye焦点位置 t o \mathbf{to} to, Forward与Up所在平面的内的矢量 Y Y Y 注意Y可以不与Forward垂直我们可以通过叉乘获得摄像机的本地坐标系: f w d n o r m a l i z e ( e y e − t o ) r i g h t n o r m a l i z e ( Y × f w d ) u p n o r m a l i z e ( f w d × r i g h t ) \begin{aligned} \mathbf{fwd} normalize(\mathbf{eye}-\mathbf{to}) \\ \mathbf{right}normalize(Y\times \mathbf{fwd}) \\ \mathbf{up} normalize(\mathbf{fwd}\times\mathbf{right})\end{aligned} ​fwdnormalize(eye−to)rightnormalize(Y×fwd)upnormalize(fwd×right)​ LookAt矩阵等于 L o o k A t [ s i d e x s i d e y s i d e z − s i d e ⋅ e y e u p x u p y u p z − u p ⋅ e y e f w d x f w d x f w d x − f w d ⋅ e y e 0 0 0 1 ] LookAt \begin{bmatrix} \mathbf{side}_x \mathbf{side}_y \mathbf{side}_z -\mathbf{side}\cdot \mathbf{eye}\\ \mathbf{up}_x \mathbf{up}_y \mathbf{up}_z -\mathbf{up}\cdot \mathbf{eye}\\ \mathbf{fwd}_x \mathbf{fwd}_x \mathbf{fwd}_x -\mathbf{fwd}\cdot \mathbf{eye}\\ 0 0 0 1 \end{bmatrix} LookAt ​sidex​upx​fwdx​0​sidey​upy​fwdx​0​sidez​upz​fwdx​0​−side⋅eye−up⋅eye−fwd⋅eye1​ ​ Overload中计算视图矩阵代码 OvMaths::FMatrix4 OvMaths::FMatrix4::CreateView(const float p_eyeX, const float p_eyeY, const float p_eyeZ, const float p_lookX, const float p_lookY, const float p_lookZ, const float p_upX, const float p_upY, const float p_upZ) {const OvMaths::FVector3 eye(p_eyeX, p_eyeY, p_eyeZ); // 摄像机位置const OvMaths::FVector3 look(p_lookX, p_lookY, p_lookZ); // 摄像机焦点const OvMaths::FVector3 up(p_upX, p_upY, p_upZ); // 摄像机upconst OvMaths::FVector3 forward(eye - look); // 摄像机的Z轴FVector3::Normalize(forward);// cross得到right轴const OvMaths::FVector3 upXForward(OvMaths::FVector3::Cross(up, forward));FVector3::Normalize(upXForward);// cross得到Up轴等价于Y轴const OvMaths::FVector3 v(OvMaths::FVector3::Cross(forward, upXForward));OvMaths::FMatrix4 View;View.data[0] upXForward.x;View.data[1] upXForward.y;View.data[2] upXForward.z;View.data[3] -OvMaths::FVector3::Dot(eye, upXForward);View.data[4] v.x;View.data[5] v.y;View.data[6] v.z;View.data[7] -OvMaths::FVector3::Dot(eye, v);View.data[8] forward.x;View.data[9] forward.y;View.data[10] forward.z;View.data[11] -OvMaths::FVector3::Dot(eye, forward);return View; }2. 投影矩阵 投影是将物体的光线投射到相机的近平面上将3D物体变成2D图像是将相机坐标空间转换到屏幕空间类似于真实相机的曝光过程。投影有两种透视投影与正交投影。 透视投影通过透视概念模仿我们看到的真实世界的方式尝试让2D图像看起来像是3D的。物体近大远小这样3D空间中有的平行线看起来就不再平行。 正投影与透视投影相反在视锥体中的物体不因其距离相机远近做任何调整直接进行投影。正投影在CAD软件中使用广泛。 透视投影矩阵 [ 2 Z n e a r R − L 0 R L R − L 0 0 2 Z n e a r T − B T B T − B 0 0 0 − Z f a r Z n e a r Z f a r − Z n e a r − 2 Z n e a r Z f a r Z f a r − Z n e a r 0 0 − 1 0 ] \begin{bmatrix} \frac{2Z_{near}}{R-L} 0 \frac{RL}{R-L} 0\\ 0 \frac{2Z_{near}}{T-B} \frac{TB}{T-B} 0\\ 0 0 -\frac{Z_{far}Z_{near}}{Z_{far}-Z_{near}} -\frac{2Z_{near}Z_{far}}{Z_{far}-Z_{near}} \\ 0 0 -1 0 \end{bmatrix} ​R−L2Znear​​000​0T−B2Znear​​00​R−LRL​T−BTB​−Zfar​−Znear​Zfar​Znear​​−1​00−Zfar​−Znear​2Znear​Zfar​​0​ ​ 其中      Z n e a r 、 Z f a r 是相机位置到近平面、远平面的距离 Z_{near}、Z_{far}是相机位置到近平面、远平面的距离 Znear​、Zfar​是相机位置到近平面、远平面的距离      R、L–投影平面左右边界的X坐标      T、B–投影平面上下边界的Y坐标 Overload中计算透视投影矩阵的代码: OvMaths::FMatrix4 OvMaths::FMatrix4::CreateFrustum(const float p_left, const float p_right, const float p_bottom, const float p_top, const float p_zNear, const float p_zFar) {const float maxView 2.0f * p_zNear;const float width p_right - p_left;const float height p_top - p_bottom;const float zRange p_zFar - p_zNear;FMatrix4 Frustum;Frustum.data[0] maxView / width;Frustum.data[5] maxView / height;Frustum.data[2] (p_right p_left) / width;Frustum.data[6] (p_top p_bottom) / height;Frustum.data[10] (-p_zFar - p_zNear) / zRange;Frustum.data[14] -1.0f;Frustum.data[11] (-maxView * p_zFar) / zRange;Frustum.data[15] 0.0f;return Frustum; }正投影矩阵 [ 2 R − L 0 0 − R L R − L 0 2 T − B 0 − T B T − B 0 0 1 Z f a r − Z n e a r − Z n e a r Z f a r − Z n e a r 0 0 0 1 ] \begin{bmatrix} \frac{2}{R-L} 0 0 -\frac{RL}{R-L} \\ 0 \frac{2}{T-B} 0 -\frac{TB}{T-B} \\ 0 0 \frac{1}{Z_{far}-Z_{near}} -\frac{Z_{near}}{Z_{far}-Z_{near}} \\ 0 0 0 1 \end{bmatrix} ​R−L2​000​0T−B2​00​00Zfar​−Znear​1​0​−R−LRL​−T−BTB​−Zfar​−Znear​Znear​​1​ ​ Overload中计算正投影矩阵的代码: OvMaths::FMatrix4 OvMaths::FMatrix4::CreateOrthographic(const float p_size, const float p_aspectRatio, const float p_zNear, const float p_zFar) {auto ortho OvMaths::FMatrix4::Identity;const auto right p_size * p_aspectRatio;const auto left -right;const auto top p_size;const auto bottom -top;ortho(0, 0) 2.0f / (right - left);ortho(1, 1) 2.0f / (top - bottom);ortho(2, 2) -2.0f / (p_zFar - p_zNear);ortho(0, 3) -(right left) / (right - left);ortho(1, 3) -(top bottom) / (top - bottom);ortho(2, 3) -(p_zFar p_zNear) / (p_zFar - p_zNear);ortho(3, 3) 1.0f;return ortho; }3. 摄像机封装 Overload中摄像机类比较简单主要是对上面两个矩阵计算的封装。每次就是的时候需传入摄像机的位置及转动四元数计算完视图投影矩阵后保存到自己的字段中。代码比较简单不再分析了。
http://www.lebaoying.cn/news/129255.html

相关文章:

  • 上海平台网站建设哪家有wordpress995
  • 网站设计培训学院平板电脑可以做网站不
  • 聊城做网站的公司信息强化网站建设和管理
  • 制作校园网站ppt汇精美ppt模板免费下载网站
  • wordpress上传功能seo排名是什么意思
  • 美食网站设计的基本思路仿顺丰优选网站源码
  • 网站建设哪家公司好建设学校网站的原因
  • 嘉禾手机网站建设淘宝电商运营
  • 网站建设亇金手指专业西安谁家的集团门户网站建设比较好
  • 投资公司网站源码博客程序是wordpress
  • 浙江天力建设集团有限公司网站企业做网站的概要
  • 东莞营销型网站建设公司前端开发主要做什么
  • 网站 用什么语言阳性几天就不传染人了
  • c#网站开发案例源码wordpress企业站制作
  • 如何建设企业微网站手机网站制作教程视频
  • 网站换模板对seo北京市朝阳区网站制作
  • 建设网站图片厦门站长优化工具
  • 沧州开发网站多少钱蓝杉互动网站建设
  • 阿里云做网站怎么样网站设计的原则有哪些
  • 创意设计一个网站网站规划建设方案模板
  • 电商网站新闻怎么做技校网站建设与维护课程教学总结
  • 深圳建筑设计平台网站哪个公司的软件系统开发
  • 聊城手机网站服务个人博客网站建设业务
  • 专业摄影网站推荐自己做网站语言构建服务器
  • 戴尔公司网站开发的经营目标wordpress怎么设置静态主页
  • wordpress 504seo词条
  • 怎样做网站优化 关键词姑苏区做网站
  • 学建筑的网站wordpress duplicator
  • 网站页面构成要素微课网站开发
  • 口碑好的定制网站建设公司哪家好wordpress 小说