第10讲摄像机漫游分析解析
- 格式:doc
- 大小:260.50 KB
- 文档页数:10
学习要点真实摄影机的基本原理目标摄影机的使用方法VRay物理摄影机的使用方法真实摄影机的结构在学习摄影机之前,我们先来了解一下真实摄影机的结构与相关名词的术语。
如果拆卸掉任何摄影机的电子装置和自动化部件,都会看到如图9-1所示的基本结构。
遮光外壳的一端有一孔穴,用以安装镜头,孔穴的对面有一容片器,用以承装一段感光胶片。
图9-1为了在不同光线强度下都能产生正确的曝光影像,摄影机镜头有一可变光阑,用来调节直径不断变化的小孔,这就是所谓的光圈。
打开快门后,光线才能透射到胶片上,快门给了用户选择准确瞬间曝光的机会,而且通过确定某一快门速度,还可以控制曝光时间的长短。
3ds Max 中的摄影机3ds Max中的摄影机在制作效果图和动画时非常有用。
在制作效果图时,可以用摄影机确定出图的范围,同时还可以调节图像的亮度,或添加一些诸如景深、运动模糊等特效;在制作动画时,可以让摄影机绕着场景进行“拍摄”,从而模拟出对象在场景中漫游观察的动画效果或是实现空中鸟瞰等特殊动画效果。
3ds Max中的摄影机只包含“标准”摄影机,而“标准”摄影机又包含“目标摄影机”和“自由摄影机”两种,如图9-2所示。
图9-2安装好VRay渲染器后,摄影机列表中会增加一种VRay摄影机,而VRay摄影机又包含“VRay穹顶摄影机”和“VRay物理摄影机”两种,如图9-3所示。
图9-3本节摄影机概要摄影机名称主要作用重要程度高目标摄影机确定观察范围以及透视变化,同时可以配合渲染参数制作景深和模糊等特效VRay物理摄影机模拟真实单反相机对场景进行取景,能独立高调整场景亮度和色彩,并能制作景深、运动模糊和散景等特效技巧与提示在实际工作中,使用频率最高的是“目标摄影机”和“VRay物理摄影机”,因此下面只讲解这两种摄影机。
9.2.1 目标摄影机目标摄影机可以查看所放置的目标周围的区域,它比自由摄影机更容易定向,因为只需将目标对象定位在所需位置的中心即可。
十三种蒙太奇镜头分析朱礼超11广告学一,前进蒙太奇这是由远到近的组接方式,它把观众的视野从总体环境逐步引向局部细节。
例举:《偷天换日》茫茫雪山大远景——房屋与人物远景——主角们出现的中景——罗布饮酒的近景,从大到小,依次排列,井然有序,富有层次感,就像“从前有座山,山里有座庙,庙里有个老和尚”那样的层次感。
二,后退蒙太奇这是由近到远的组接方式,它把观众的视野从近处的局部引领到远处的整体。
例举:《偷天换日》对怀表的特写——罗布的表情——堵车的远景,利用人物对紧迫时间的焦虑和烦恼心理采用这样的倒退式蒙太奇,简单易懂,不晦涩。
三,集合蒙太奇这是在一个完整的事态性内容过程中,选取几个主要的典型片断,把它们组接在一起,每一个片断只是事件发展中的一个具有代表性和相关性的动作高潮,通过这些高潮段落的组合,建立起一个完整的事件过程的印象。
集合蒙太奇的优点在于:叙述简练、概括性强、语意丰富。
例举:《偷天换日》史蒂夫对车队的追逐——查理对史蒂夫飞机的侦查——飞机追逐车队的小远景,采用这几个重点镜头来展现“追逐“这一主题,简单易懂,不生硬,顺序性强。
四,交叉蒙太奇例举:《偷天换日》即同一时间不同空间内容的镜头交叉地组接起来,构成紧张的气氛,造成惊险的戏剧效果。
当罗布和天才开汽艇引开保安争取时间的同时,查理一伙正在紧锣密鼓地破开保险柜,并且两处行动的镜头来回交错,引起观众心理十分紧张,情节紧凑,极具动感。
五,平行蒙太奇即两条或两条以上的情节线索在不同时空、同时异地或同时同地并列发展、分头叙述而统一在一个完整的情节结构之中,所谓“花开两朵,各表一枝”。
平行蒙太奇的作用在于:自由灵活地展现更为广阔的时空结构;多层次多侧面地观察一个事物或事件的状态和发展;揭示事物之间的内在联系。
例举:《钢铁侠3》一边是曼达林处决人质的直播,一边是总统团队在飞机上处理这一紧急事件,双方的剧情状况平行发展,但又不是交叉出现,最后统一在一场矛盾中。
2023-2024学年江苏省南京市鼓楼区八年级(上)期中物理试卷一、选择题(本题共12小题,每小题2分,共24分。
每小题给出的四个选项中只有一个1.(2分)小明所在的四人小组针对“装满水的杯子里还能放入多少枚回形针”的疑问展开了科学探究活动,小明提出“我觉得可以放50枚回形针”,小明的提法属于探究活动中的哪一环节( )A.设计实验B.猜想与假设C.提出问题D.实验结论2.(2分)关于图中声现象的四种情景,下列说法中正确的是( )A.甲图中,敲打钢尺的力越小,发出声音的音调越低B.乙图中,齿轮转动越快,发出声音的音调越高C.丙图中,向瓶外不断抽气,听到手机铃声的音色发生改变D.丁图中,安装“噪声监测仪”可以减弱噪声污染3.(2分)下列现象所对应的物态变化中,需要吸收热量的是( )A.①②B.①③C.②③D.③④4.(2分)以下热现象的解释中正确的是( )A.往皮肤上涂一些酒精会感到凉爽说明酒精蒸发时放热B.冬天冰冻的衣服也能晾干,是汽化现象,并伴随着吸热C.寒冷的北方室外多选用酒精温度计测温是因为酒精的凝固点低D.冬天在冰雪覆盖的路面上撒盐便于除雪,是因为盐可以提高冰雪的熔点5.(2分)夏天会看到雪糕周围冒“冷气”。
冬天用开水泡方便面时碗里会冒“热气”。
关于“冷气”和“热气”的说法正确的是( )A.前者是小水珠,后者是水蒸气B.“冷气”和“热气”都是气体C.都是水蒸气液化形成的D.前者是液化形成的,后者是汽化形成的6.(2分)爱钻研的小康在家里找来一只大玻璃杯,将装满水的密闭小瓶放在大玻璃杯里的水中间(如图所示),然后他把大玻璃杯放在冰箱的冷冻室内。
过一段时间取出大玻璃杯,此时小瓶中的水( )A.只有表面的水结冰B.只有底层的水结冰C.有一半的水结冰D.全部没有结冰7.(2分)下列光的现象中,与“镜中花”形成原理相同的是( )A.海市蜃楼B.屏上的皮影C.水中倒影D.光的色散8.(2分)如图所示,一束红光经三棱镜折射后,在白色光屏上a点处形成一个红色光斑( )A.若将红光改为白光,则光屏上会出现彩色光带,光屏上a点处的光斑一定是红色的B.若将红光改为紫光,则光屏水平向右移动,紫色光斑可位于a点处C.若将白色光屏改成蓝色光屏,则光屏上会出现蓝色光斑入射光D.若在白色光屏前面放置一张红色透明玻璃纸,则光屏上看不到红色光斑9.(2分)提词器是由一个高亮度显示器和一块与其成45°角的专用镀膜玻璃组成,镀膜玻璃将显示器上的文稿内容反射到演讲者前方。
视频监控系统中的运动目标跟踪与轨迹分析随着科技的不断进步,视频监控系统在我们的生活中扮演着越来越重要的角色。
视频监控系统不仅为我们提供了安全保障,还可以对运动目标进行跟踪与轨迹分析,以帮助我们更好地理解事件的发生和发展。
本文将探讨视频监控系统中的运动目标跟踪与轨迹分析的原理和应用。
运动目标跟踪是视频监控系统中的一个关键技术,它可以通过分析连续的视频帧来识别和跟踪目标的运动。
一般情况下,目标的跟踪可以分为两个阶段:目标检测和目标跟踪。
目标检测是指在每一帧中找到目标物体的位置和尺寸。
常见的目标检测算法有基于颜色、纹理或形状等特征进行匹配的方法和深度学习方法。
目标跟踪是指在连续的视频帧中追踪目标物体的运动轨迹。
常见的目标跟踪算法有卡尔曼滤波器、粒子滤波器和相关滤波器等。
在目标跟踪的基础上,轨迹分析可以提供关于目标运动模式、速度、行为等信息。
通过对目标的轨迹进行分析,可以判断目标是否具有可疑行为,进一步提高监控系统的安全性和效率。
轨迹分析的方法包括轨迹拟合、轨迹聚类和轨迹关联等。
轨迹拟合是指通过拟合轨迹的数学模型,预测目标的未来位置。
轨迹聚类是指将轨迹分为不同的群组,以便对目标进行分类和识别。
轨迹关联是指将多个目标的轨迹进行匹配和关联。
视频监控系统中的运动目标跟踪与轨迹分析具有广泛的应用。
在交通领域,可以利用目标的轨迹分析交通流量和拥堵情况,优化交通信号控制系统。
在工业领域,可以通过跟踪和分析工人的运动轨迹,提高生产效率和安全性。
在安防领域,可以通过跟踪和分析目标的运动轨迹,快速发现可疑的行为并采取措施。
此外,运动目标跟踪与轨迹分析还可以应用于体育比赛、行人检测、智能家居等领域。
然而,视频监控系统中的运动目标跟踪与轨迹分析仍然面临一些挑战和难题。
首先,目标的形状、大小和运动速度的多样性会对目标的跟踪和分析造成困扰。
其次,背景的变化和光照条件的变化也会干扰目标的跟踪和分析。
此外,复杂的场景中可能存在交叉和遮挡等问题,使得目标的识别和轨迹分析变得更加困难。
武汉三中寄宿中学新初一分班语文试卷看拼音写词语。
kǒnɡ jùnuó yíduān xiánɡzhēn zhì( ) ( ) ( ) ( )jiàn wēi zhī zhùfán huā sì jǐn( )( )下面带点字注音全部正确的一组是()。
A.涔涔.chén焚.fén烧人声鼎.沸dǐngB.似.sì乎奇葩.pā负荆.jīn请罪C.薄.báo 雾珊.shān瑚锲.而不舍qièD.黑魆魆.xū湖畔.bàn哄.hǒng 堂大笑下列词语中没有错别字的一项是()A.诀别晦暗气充斗牛苦心孤诣B.烦躁藉贯变幻多姿相形见绌C.馈赠饶恕骇人听闻穷困缭倒D.赃款凌驾无与伦比诚惶诚恐对下列句子运用的修辞手法辨析有误的一项是()A.为是其智弗若与?曰:非然也。
(设问句)B.日初出大如车盖,及日中则如盘盂,此不为远者小而近者大乎?(反问句)C.蓝色的、红色的小宝石,钉住几个金黄色的齿轮,里边还有一个小尾巴似的东西不停地摆来摆去。
(拟人句)D.过去的日子如轻烟,被微风吹散了,如薄雾,被初阳蒸融了。
(比喻句)以下句子没有语病的是()A.我们阅读课外书籍,可以增长知识和写作水平。
B.她跑进教室,兴高采烈地宣布了明天去秋游的好消息。
C.妈妈买了水果、桃子、苹果、香蕉,还有巧克力。
D.《草原》的作者是老舍写的。
下列句中标点符号使用不正确的一项是()A.他们的歌声好像告诉我们:“我在歌唱,我很快乐!”B.我不知道这个人是谁?C.滴滴答答……叮叮咚咚……所有的树林,树林里的每片树叶;所有的房子,房子的屋顶和窗户,都发出不同的声音。
D.菊花仙子得到的颜色就更多了,紫红的、淡黄的、雪白的……美丽的菊花在秋雨里频频点头。
下列作者、书名与书中人物搭配有误的一项是()(1分)A.刘易斯·卡罗尔——《爱丽丝漫游奇境》——柴郡猫B.马克·吐温——《汤姆·索亚历险记》——格列佛C.塞尔玛·拉格洛芙——《骑鹅旅行记》——阿卡D.曹雪芹——《红楼梦》——刘姥姥下列乱句重组正确的一项是()①于是,冒出了一个个像尖塔似的小脑袋。
语文版2018-2019学年六年级上册语文第二单元第10课《太阳与士兵》同步练习一、基础运用(共5题;共18分)1.(3分)按拼音写汉字yíng rào xīn xiāngáo yóu2.(4分)形近字组词哨坡俏波3.(3分)用上恰当的修辞手法,把句子补充完整。
①一到夏季,这哨所繁花点点更像。
②在我们心中,国旗是。
③站立在祖国的最东端,我们成了。
4.(3分)写出近义词坚强—照耀—催促—5.(5分)仔细阅读课文《太阳与士兵》,说说课文写了几方面的内容,表达了作者怎样的思想感情。
二、阅读理解(共2题;共33分)6.(10分)阅读课文《太阳与士兵》选段,回答问题士兵:我们之所以意志坚强,是因为我们心中拥有太阳。
这太阳就是我们的祖国。
她与您融为一体,都以光明照耀我们,温暖我们。
在您的光辉沐浴下,我们感受到祖同母亲的慈爱。
行走在祖国的大地上,我们又感觉像遨游在太阳的光河里。
站立在祖国的最东端,我们成了连接太阳与祖国的最佳导体,我们因此变得神圣。
我们也成了光明的元素,我们也要发光,我们也要传热。
我们要将我们全部的光和热,献给祖国,献给人民,献给您——伟大的太阳!(1)(5分)①这段话运用了什么修辞手法?(2)(5分)体现了士兵什么精神?7.(23分)阅读下文,回答问题《巡道工的故事》暑假里,我乘火车到外婆家去玩。
我靠着车窗,看见绿色的田野,清澈见底的溪流……从窗外匆匆闪过。
眼前的美景深深地吸引着我。
“呜------”前方传来了一声汽笛长鸣,我探出头往前一看,车头正带着我们转弯,弯道旁站立着一位老工人,他虽然戴草帽,可是身上的汗水仍然像许多条细细的小溪往下淌,那光着的上身显得油光滑亮,好像是用紫铜铸成的,他的手里,举着一把铁锤,正微笑着向我们致意。
我敢肯定,他就是巡道工,因为爸爸曾经给我讲过巡道工的故事-------有一次,爸爸坐火车到远方去出差,在一个漆黑的深夜,列车在倾盆大雨中飞驰。
多视处理的原理-概述说明以及解释1.引言1.1 概述概述部分的内容可以从多视处理的定义和背景入手,简要介绍多视处理的概念和原理。
以下是一种可能的写作方式:多视处理是一种利用多个视角或传感器获取的相关视觉信息进行处理和分析的技术。
通过借助多视角的信息,我们能够更全面、准确地理解和解释场景中的对象、行为和结构。
在多视处理中,多个视角或传感器可以是来自不同的摄像机、扫描仪、雷达等设备,它们采集到的视觉数据可以在时域和空域上具有差异,并提供了丰富的信息和观察角度。
这些多视角信息可以被整合和融合,从而获取对目标或场景的更全面、更准确的描述。
多视处理的原理基于以下几个关键点:首先,通过多个视角或传感器获取的信息可以提供多样性的空间观察,从而增加了对场景或目标的精确度。
其次,通过对多个视角或传感器的信息进行配准和校正,我们可以获取对场景或目标的一致性描述。
最后,通过整合多个视角或传感器的信息,我们可以得到更全面、更准确的目标或场景模型。
多视处理在计算机视觉、图像处理、机器人技术等领域有着广泛的应用。
例如,在立体视觉中,通过多视角图像的配准和匹配,我们可以重建出场景的三维模型,用于目标识别、位姿估计等任务。
在物体跟踪和行为分析中,利用多个视角的信息可以提供更丰富的上下文和观察角度,从而增强对目标行为和交互的理解。
总而言之,多视处理是一种利用多个视角或传感器获取的相关视觉信息进行处理和分析的技术。
通过整合和融合多视角信息,我们可以提高对目标或场景的理解和描述的准确度和全面度。
在接下来的章节中,我们将分析多视处理在不同应用领域的具体应用和挑战。
1.2 文章结构文章结构部分的内容如下所示:文章结构本篇长文将按照以下结构进行叙述和讨论多视处理的原理。
首先,引言部分将对本文进行概述,说明文章的目的和结构。
接着,正文部分将详细介绍多视处理的概念和原理,以及其在各个应用领域中的重要性和应用案例。
最后,结论部分将对多视处理的原理进行总结,并展望其未来的发展方向。
摄像机追踪原理
摄像机追踪原理是通过分析视频或图像中的目标物体的位置和运动,从而实现对其进行准确跟踪的一种技术。
摄像机追踪通常包括以下几个主要步骤:
1. 目标检测:首先对视频或图像中的目标进行检测,以确定目标的位置和外观特征。
常用的目标检测算法有基于颜色、形状或纹理等特征的方法,如Haar级联检测器、HOG特征和卷积神经网络等。
2. 目标跟踪:在检测到目标后,需要通过目标跟踪算法来对目标进行连续跟踪。
目标跟踪算法主要分为基于特征的方法和基于深度学习的方法。
其中,基于特征的方法使用目标的外观特征进行跟踪,如利用目标的颜色直方图、形状模型或稀疏表示进行跟踪;而基于深度学习的方法则通过训练深度神经网络来学习目标的表示,实现更精确的跟踪效果。
3. 运动估计:为了实现准确的目标跟踪,需要对目标的运动进行估计。
通常使用kalman滤波器、粒子滤波器或光流法等方法来对目标的位置和速度进行估计。
4. 目标重识别:在目标遮挡或跟踪丢失的情况下,需要对目标进行重识别,以确保跟踪的连续性。
重识别算法主要利用目标的外观特征或特定的描述子进行目标匹配,如局部特征匹配、基于深度学习的重识别网络等。
通过上述步骤的组合和优化,摄像机追踪系统可以实现对目标
物体的准确跟踪,广泛应用于视频监控、智能交通、虚拟现实等领域。
摄像机漫游设置观察矩阵代码://建立并设置观察矩阵D3DXVECTOR3 vEyePt( 0.0f,0.0f,-15.0f );D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );D3DXVECTOR3 vUpV ec( 0.0f, 1.0f, 0.0f );D3DXMA TRIX matView;D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );观察变换---摄像机属性通常用四个分量来确定一个摄像机相对于世界坐标系的位置和朝向:左分量、上分量、观察分量和位置分量。
在世界坐标系中,这几个分量都通过向量表示,并且实际上它们为摄像机定义了一个局部坐标系,需要将世界坐标系中的物体随着摄像机一起进行变换,以便让摄像机的坐标系与世界坐标系完全重合摄像机变换1.沿各分量平移由于摄像机包含向右、向上、观察三个分量,因此可以控制摄像机分别沿这三个分量进行平移。
其中,沿右分量的平移称作扫视,沿上分量的平移称作升降,而沿观察分量的平移称作平动,如图所示2.绕各分量旋转摄像机的另一种变换是分别绕上分量、右分量和观察分量进行旋转。
其中,绕上分量的旋转称作偏航,绕右分量的旋转称作俯仰,而绕观察分量的旋转称作滚动,如图所示3.绕观察点旋转摄像机的平移和旋转已经能够满足简单的应用,但是有时候还需要将观察点固定,并控制摄像机围绕该点做圆周运动,以便能够从不同角度观察同一物体。
因此,还需要让摄像机绕某个点进行旋转,如图所示以摄像机在y方向上绕点l=(l x,l y,l z)旋转为例,假设当前摄像机位于p点(观察点l与p点同在y平面内),那么当摄像机按逆时针方向旋转a 角度后应该位于p’点,如图所示。
//摄像机绕Y轴旋转fAngle角度VOID CCamera::CircleRotationY(FLOAT fAngle){D3DXMA TRIX R;D3DXMatrixRotationAxis(&R, &m_vUpVec, fAngle);D3DXVec3TransformCoord(&m_vRightVec, &m_vRightVec, &R);D3DXVec3TransformCoord(&m_vLookVec, &m_vLookVec, &R);float dx = m_vPosition.x - m_vLookat.x;float dz = m_vPosition.z - m_vLookat.z;m_vPosition.x = m_vLookat.x + dx * cosf(fAngle) - dz * sinf(fAngle);m_vPosition.z = m_vLookat.z + dx * sinf(fAngle) + dz * cosf(fAngle);ResetLookatPos(&m_vLookat);}根据上面介绍的内容,可以定义一个具有九个自由度的摄像机CCamera类,其中可以沿三个分量平移、绕三个分量旋转,以及在三个坐标方向上绕观察点旋转。
4.CCamera类定义#pragma once#include <d3d9.h>#include <d3dx9.h>//--------------------------------------------------------------------------------------// Name: class CCamera// Desc: 虚拟摄像机平移、旋转//--------------------------------------------------------------------------------------class CCamera{private:D3DXVECTOR3 m_vRightVec; // 摄像机右侧向量D3DXVECTOR3 m_vUpVec; // 摄像机上方向量D3DXVECTOR3 m_vLookVec; //摄像机视线方向D3DXVECTOR3 m_vPosition; // 摄像机当前位置D3DXMA TRIX m_matView; // 摄像机矩阵D3DXMA TRIX m_matProj; // 投影矩阵D3DXVECTOR3 m_vLookat; //摄像机视线位置LPDIRECT3DDEVICE9 m_pd3dDevice;public:CCamera(IDirect3DDevice9 *pd3dDevice);virtual ~CCamera(void);public:VOID GetViewMatrix(D3DXMA TRIX *pMatrix);//获取摄像机矩阵VOID GetProjMatrix(D3DXMATRIX *pMatrix) { *pMatrix = m_matProj; }VOID GetCameraPos(D3DXVECTOR3 *pVector) { *pVector = m_vPosition; }VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVec; }VOID ResetLookatPos(D3DXVECTOR3 *pLookat = NULL);//设置视线位置VOID ResetCameraPos(D3DXVECTOR3 *pVector = NULL);//设置摄像机位置VOID ResetViewMatrix(D3DXMA TRIX *pMatrix = NULL);//设置摄像机(观察)矩阵VOID ResetProjMatrix(D3DXMA TRIX *pMatrix = NULL);//设置投影矩阵public:// 沿各分量平移VOID MoveAlongRightVec(FLOAT fUnits); // 沿right向量移动VOID MoveAlongUpVec(FLOAT fUnits); // 沿up向量移动VOID MoveAlongLookVec(FLOAT fUnits); // 沿look向量移动// 绕各分量旋转VOID RotationRightVec(FLOAT fAngle); // 绕right向量选择VOID RotationUpVec(FLOAT fAngle); // 绕up向量旋转VOID RotationLookVec(FLOAT fAngle); // 绕look向量旋转// 绕空间点旋转VOID CircleRotationX(FLOAT fAngle); // 在X方向上绕观察点旋转VOID CircleRotationY(FLOAT fAngle); // 在Y方向上绕观察点旋转VOID CircleRotationZ(FLOAT fAngle); // 在Z方向上绕观察点旋转};5、摄像机类CCamera类的实现#include "Camera.h"#include <fstream>CCamera::CCamera(IDirect3DDevice9 *pd3dDevice){m_pd3dDevice = pd3dDevice;m_vRightVec = D3DXVECTOR3(1.0f, 0.0f, 0.0f); // 默认右向量与X正半轴重合m_vUpVec = D3DXVECTOR3(0.0f, 1.0f, 0.0f); // 默认上向量与Y正半轴重合m_vLookVec = D3DXVECTOR3(0.0f, 0.0f, 1.0f); // 默认观察向量与Z正半轴重合m_vPosition = D3DXVECTOR3(0.0f, 0.0f, 0.0f); // 默认摄像机的位置为原点m_vLookat = D3DXVECTOR3(0.0f, 0.0f, 0.0f);GetViewMatrix(&m_matView); // 取得取景变换矩阵D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 2000.0f); // 投影变换矩阵}CCamera::~CCamera(void){}VOID CCamera::GetViewMatrix(D3DXMATRIX *pMatrix){// 使各分量相互垂直D3DXVec3Normalize(&m_vLookVec, &m_vLookVec);D3DXVec3Cross(&m_vUpVec, &m_vLookVec, &m_vRightVec); // 上向量与观察向量垂直D3DXVec3Normalize(&m_vUpVec, &m_vUpVec); // 规格化上向量D3DXVec3Cross(&m_vRightVec, &m_vUpVec, &m_vLookVec); // 右向量与上向量垂直//你能通过左手法则确定叉积返回的向量。
按照第一个向量指向第二个向量弯曲你的左手,//这时拇指所指的方向就是叉积向量所指的方向。
D3DXVec3Normalize(&m_vRightVec, &m_vRightVec); // 规格化右向量// 创建取景变换矩阵pMatrix->_11 = m_vRightVec.x; // RxpMatrix->_12 = m_vUpVec.x; // UxpMatrix->_13 = m_vLookVec.x; // LxpMatrix->_14 = 0.0f;pMatrix->_21 = m_vRightVec.y; // RypMatrix->_22 = m_vUpVec.y; // UypMatrix->_23 = m_vLookVec.y; // LypMatrix->_24 = 0.0f;pMatrix->_31 = m_vRightVec.z; // RzpMatrix->_32 = m_vUpVec.z; // UzpMatrix->_33 = m_vLookVec.z; // LzpMatrix->_34 = 0.0f;pMatrix->_41 = -D3DXVec3Dot(&m_vRightVec, &m_vPosition); // -P*RpMatrix->_42 = -D3DXVec3Dot(&m_vUpVec, &m_vPosition); // -P*UpMatrix->_43 = -D3DXVec3Dot(&m_vLookVec, &m_vPosition); // -P*LpMatrix->_44 = 1.0f;}VOID CCamera::ResetLookatPos(D3DXVECTOR3 *pLookat){if (pLookat != NULL) m_vLookat = (*pLookat);else m_vLookat = D3DXVECTOR3(0.0f, 0.0f, 1.0f);m_vLookVec = m_vLookat - m_vPosition;D3DXVec3Normalize(&m_vLookVec, &m_vLookVec);D3DXVec3Cross(&m_vUpVec, &m_vLookVec, &m_vRightVec);D3DXVec3Normalize(&m_vUpVec, &m_vUpVec);D3DXVec3Cross(&m_vRightVec, &m_vUpVec, &m_vLookVec);D3DXVec3Normalize(&m_vRightVec, &m_vRightVec);}VOID CCamera::ResetCameraPos(D3DXVECTOR3 *pVector){D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, 0.0f);m_vPosition = pVector ? (*pVector) : V;}VOID CCamera::ResetViewMatrix(D3DXMA TRIX *pMatrix){if (pMatrix) m_matView = *pMatrix;else GetViewMatrix(&m_matView);m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);m_vRightVec = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);m_vUpVec = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);m_vLookVec = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33); }VOID CCamera::ResetProjMatrix(D3DXMA TRIX *pMatrix){if (pMatrix != NULL) m_matProj = *pMatrix;else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f);m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);}// 沿右向量平移fUnits个单位VOID CCamera::MoveAlongRightVec(FLOAT fUnits){m_vPosition += m_vRightVec * fUnits;m_vLookat += m_vRightVec * fUnits;}// 沿上向量平移fUnits个单位VOID CCamera::MoveAlongUpVec(FLOAT fUnits){m_vPosition += m_vUpVec * fUnits;m_vLookat += m_vUpVec * fUnits;}// 沿观察向量平移fUnits个单位VOID CCamera::MoveAlongLookVec(FLOAT fUnits){m_vPosition += m_vLookVec * fUnits;m_vLookat += m_vLookVec * fUnits;}//旋转使用D3DXMatrixRotationAxis函数实现,绕right\up\look方向旋转的实现方法:VOID CCamera::RotationRightVec(FLOAT fAngle){D3DXMA TRIX R;D3DXMatrixRotationAxis(&R, &m_vRightVec, fAngle);D3DXVec3TransformCoord(&m_vUpVec, &m_vPosition, &R);D3DXVec3TransformCoord(&m_vLookVec, &m_vLookVec, &R);m_vLookat = m_vLookVec * D3DXVec3Length(&m_vPosition);}/*D3DXVec3TransformCoord用矩阵变换3-D向量,并且用w = 1投影结果。