XNA那些事(六)--WINDOWS PHONE 游戏开发中的3D摄像机_3d游戏建模框架-程序员宅基地

技术标签: XNA那些事  windows phone  游戏  工作  框架  微软  任务  

马上国庆了,在这里祝各位同仁,国庆快乐,合家团圆!

前一段把3D建模当中一些基础性的工作开了个头,那么切入正题,接下来就必须要讨论一个3D游戏建模当中的一个重要概念--摄像机。

如果大家之前了解过相关的建模知识不管是D3D还是OPENGL甚至是3DMAX都应该听到过摄像机这个概念,其实这个概念非常的形象,它描述就是3D游戏中观察者的位置及观看方向的概念,但是要说清楚这个概念并不容易。

  首先我们还是来建立一下对于摄像机的感性认识,比如在一款像CS一样的射击游戏中,摄像机就位于玩家所控制对象的眼部,这也就是第一视角。而在一款即时战略游戏中例如像WAR3,视角一般是在半空中某一位置。那么如果摄像机仅仅是一个位置的概念那么不值得单独讨论,更不需要给他两篇的章节说明。

      我们说在几何角度上说摄像机有位置向量,方向向量和向上向量去组成。这些概念之前说过,这里再简单的说明一下,可以想象一下眼睛,位置向量就是描述眼睛的位置,那么方向向量呢就是眼睛往哪看,当然了如果把位置向量加上方向向量就是目标向量了,说通俗点也就是眼睛在哪加上眼看的方向就是看到的目标了。见下图。

还有一个概念是什么可能会令初学的朋友困扰就是向上向量,什么是向上向量,如果还是以眼睛为例说明的话其实就是指头顶的方向,其实如果大家仔细想想,假设在眼睛位置一定,眼睛看的方向一定的情况,一个人歪着头(注意不是侧着脸)看到的图像与正着头看到的图像是不一样的。

那么一个3D摄像机要能够完成什么样的基础任务呢(在这里建议微软在一下个XNA的版本里最好将摄像机类尤其是第一视角的摄像机直接加入到标准框架当中去)。

1、平移,什么是平移,当我们玩CS的时候用方向键控制人物或者使人物蹲下的时候其实这个摄像机就是在做平移的。

几何概念:平移从几何角度上来说就是向上向量与方向向量不变,但是位置向量改变的概念。

2、旋转,旋转就是摄像机绕着某个轴转。发我们玩CS的时候左右移动鼠标做转身或者回头的动作的时候其实就是在做旋转。

几何概念:旋转其实就是位置向量与向上向量不动,但是方向向量绕某一轴转动的概念。其中对于第一视角来说,旋转就是方向向量绕着向上向量转动的结果,对于第三视角旋转就是方向向量绕某固定轴(大部情况下是与向上向量平等的轴)转的概念。

3、仰俯:这又是个难解释的概念,不过用CS来说,就是你通过上下移动鼠标来达到向枪口朝上或者朝下的动作,再直白一些其实就是上下点头的动作。

几何概念:说到俯不得不说到一个立体几何中的概念即线面垂直,我们说向上向量与方向向量组成了一个平面,因为他们有交点,其交点就在眼睛的那个点上,你可以想象一下头的法线与眼看方向组成了一个平面,其实这个平面不重要,而与这个平面垂直的线很重要,我们想象一个,当咱们点头的时候,头会绕着一个轴转,这个轴就是这个平面的垂线。

     根据立体几何的原理,这个轴线会与方向向量和向上向量都垂直(这也是我们后面求出这条旋转轴的要领),而方向向量与向上向量在仰俯时都会同时绕这个轴相同的方向转相同的角度。

说到底只要了解了3D摄像机的基础动作,那么很多华丽的转身其实就是这个基础动作的叠加。

下节将通过代码解释这个基础动作如何在XNA当中完成。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/BEYONDMA/article/details/6819409

智能推荐

VUE 使用 IView 实现Table Tree进行异步数据加载_iview table tree-程序员宅基地

文章浏览阅读2.3k次。VUE 使用 IView 实现Table Tree进行异步数据加载页面布局 <Table ref="thisTab" row-key="ID" :load-data="handleLoadData" :columns="columnsList" :data="familyList" :highlight-row="true" :disabled-hover=._iview table tree

matlab飞机飞行模型,使用 MATLAB/Simulink 设计无人机飞行控制系统(二、动力学模型建立)...-程序员宅基地

文章浏览阅读8.7k次,点赞5次,收藏110次。前面一篇文章已经讲解了如何获取无人机的气动参数,本篇文章讲解如何建立无人机动力学模型。建立无人机动力学模型前面我们用 MATLAB 绘制了飞机的几何外形,并调用 DATCOM计算了无人机的气动参数。我们现在看一看 DATCOM 输出的 .out 文件是什么样的。我们又该怎么利用它呢?通过 DATCOM 计算得到的气动参数文件这是一个非常复杂的文件,里面记录了我们之前定义的各种飞行包线内的工作点上,..._大飞机数学模型matlab

cmake编译opencv: Win10+cmake3.14.4+cuda10.0+cudnn7.6+opencv-4.0.0+contrib+vs2015_opencv cudnn cmake-程序员宅基地

文章浏览阅读7.9k次,点赞15次,收藏31次。cmake编译opencv:Win10+opencv-3.4.0+contrib+cuda10.1+cudnn10.1+vs2013+cmake3.14.4安装所需软件/库欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定..._opencv cudnn cmake

dlib 人脸特征点检测_ndlb特征检测-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏31次。人脸特征点检测(Facial landmark detection),即人脸特征点定位、人脸对齐,是在人脸检测的基础上进行的,对人类脸上的特征点(嘴角、眼角等)进行定位。人脸特征点检测有诸多用途:改善人脸识别:通过人脸特征点检测将人脸对齐到平均脸,对齐后的人脸图像识别算法更加有效。 人脸平均:利用人脸特征点检测的结果,将多个人脸进行融合,形成新的平均人脸。 人脸交换:利用人脸特征点检测..._ndlb特征检测

mysql计算俩个日期之间的天数_mysql计算两个日期之间的天数-程序员宅基地

文章浏览阅读9.3k次,点赞3次,收藏8次。1.利用TO_DAYS(date)函数例如:SELECT TO_DAYS(NOW()) - TO_DAYS('20200721')2.利用DATEDIFF(expr1,expr2)函数例如:select DATEDIFF(NOW(),'20200721')3.利用TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)函数这个函数可计算俩日期时间之间相差的天数、秒数、分钟数、周数、小时数,取决于unit参数的取值。该参数具体释义如下:_mysql计算两个日期之间的天数

【Unity】技巧集合_unityeditorinternal.animatorcontroller-程序员宅基地

文章浏览阅读527次。转发,请保持地址:http://blog.csdn.net/stalendp/article/details/17114135这篇文章将收集unity的相关技巧,会不断地更新内容。1)保存运行中的状态unity在运行状态时是不能够保存的。但在运行时编辑的时候,有时会发现比较好的效果想保存。这时可以在 “Hierarchy”中复制相关对象树,暂停游戏后替换原来的,就可以了_unityeditorinternal.animatorcontroller

随便推点

2024(20届)数据科学与大数据专业毕业设计选题合集_数据科学与大数据技术 专业 本科论文选题方向-程序员宅基地

文章浏览阅读4.9k次,点赞14次,收藏69次。数据科学与大数据专业毕业设计选题合集涵盖了管理系统、小程序、深度学习、机器学习、算法、人工智能、大数据、网络安全、嵌入式、推荐系统、目标检测等多个热门领域。对于计算机专业、软件工程专业、人工智能专业、通信工程专业的毕业生而言,选择一个合适的毕业设计选题至关重要。在这个毕业设计选题合集中,我们精心收集了各种有趣且具有挑战性的选题,旨在帮助学生们在毕业设计中展现他们的技术实力和创新能力。不论是对于对深度学习技术感兴趣的同学,还是希望探索机器学习、算法或人工智能的领域的同学,本合集都能为您提供丰富的选题资源和灵感_数据科学与大数据技术 专业 本科论文选题方向

手把手教你实现xxl-job分布式任务调度平台搭建-程序员宅基地

文章浏览阅读1.9k次。程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 4.5 分钟。编辑:业余草推荐:https://www.xttblog.com/?p=5097最近有网友咨询我 xx..._xxl-job 搭建 配置

echarts的legend——图例样式的配置_echarts legend-程序员宅基地

文章浏览阅读3.1w次,点赞25次,收藏60次。echarts官网配置项手册里有非常详细的内容,我们挑几种常用的看看,加深对legend属性的理解。echarts图表中的图例,有形状,颜色,位置等等各种样式的不同配置。以上几张图表中,红色圆圈部分即图例。_echarts legend

数仓维度建模之维度表设计(设计实操二)_维度建模设计和实施过程-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏22次。概述维度建模是一种将数据结构化的逻辑设计方法,它将客观世界划分为度量和上下文。度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度。它与实体-关系建模有很大的区别,实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。维度建模优点事实表事实表存储了从..._维度建模设计和实施过程

修改表字段长度sql-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏6次。ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度)alter table EXAM_TEST modify STU_NAME VARCHAR2(100);alter table EXAM_TEST modify STU_NAME VARCHAR2(100);_修改表字段长度

Unity零基础到入门 ️| 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】!_unity学习路线-程序员宅基地

文章浏览阅读10w+次,点赞1.4k次,收藏7.3k次。Unity基础知识学习,Unity学习路线总结。本篇文章对Unity的学习路线做了一个全面系统的总结,对Unity有兴趣的小伙伴福利到了!敬请品尝~_unity学习路线

推荐文章

热门文章

相关标签