最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

3D相機使用教程

2020-09-05 22:07 作者:啵嘰玉桂狗勾  | 我要投稿


我今天要講的是Cocos2d-x中相機的使用,在Cocos2d-x 3.3版本中加入了相機這個類,這個類在3D游戲中是必不可少的,因為3D游戲是一個立體的世界,在3D游戲中的攝像機就相當于是我們的眼睛,通過它我們可以觀察整個的游戲世界。

?

上圖就是在3D游戲中使用相機的原理,當然這是一個透視投影的相機,我們在游戲中的相機就是根據(jù)圖中的原理實現(xiàn)的。在游戲中一般有兩種類型的相機:一種就是上圖中介紹的透視相機,它在3D游戲中是很常見的。還有一種是正交投影相機,它沒有像透視投影一樣的近大遠小的效果而是在相機內(nèi)任何位置的物體的大小都是一樣的,通常這種類型的相機都用在角色屬性面板中顯示的角色模型。說完了相機的兩種類型,下面我們來看看在Cocos2d-x中我們是如何來創(chuàng)建相機的:

上面的代碼就是創(chuàng)建了一個透視投影的相機,下面我來說明下參數(shù)的意義:第一個參數(shù)是FOV,即視場角(field of view),它可以理解為你的視線左右能看多寬(以角度計)第二個就是上述所有的寬高比,最后兩個是相機的近裁面和遠裁面,這個也很好理解,距離相機比近裁面還要近的,比遠裁面還要遠的,都不會被渲染到。

?

上圖是正交相機的原理。

02.jpg

上面的代碼就是創(chuàng)建了一個正交投影的相機,下面我來說明下參數(shù)的意義:第一個參數(shù)是相機的寬度,第二個就是相機的高度,最后兩個是相機的近裁面和遠裁面,這個也很好理解,距離相機比近裁面還要近的,比遠裁面還要遠的,都不會被渲染到。這個和透視相機是一樣的。接下來,我們需要對相機設(shè)置一個標記位(FLAG),這樣可以讓相機與其他的相機區(qū)分開來--在一些游戲的應(yīng)用中,通常不僅僅只有一個相機,如果有多個相機的話,那么我們要標記一個物體,到底是要被哪一個相機所"看到",這時候,我們就需要設(shè)置它的CameraMask來與相機的Flag對應(yīng):

如果同時存在多個相機,怎么標記某個物體被那些相機看到呢?

?

注意到Camera中有個_cameraFlag屬性,為枚舉類型,定義如下

1

2

3

4

5

6

7

8

9

10

11

12

enum?class?CameraFlag

{

????DEFAULT?=?1,

????USER1?=?1?<<?1,

????USER2?=?1?<<?2,

????USER3?=?1<<? 3,

????USER4?=?1?<<?4,

????USER5?=?1?<<?5,

????USER6?=?1?<<?6,

????USER7?=?1?<<?7,

????USER8?=?1?<<?8,

};

Node中有個_cameraMask的屬性,當相機的_cameraFlag & _cameraMask為true時,該Node可以被該相機看到。所以在上述相機的創(chuàng)建代碼中,camera的CameraFlag設(shè)置為CameraFlag::USER1,并且該layer的CameraMask為2,則表示該layer只能被CameraFlag::USER1相機看到。如果你設(shè)置的精靈的cameraMask是3的話,它也是能被cameraFlag為CameraFlag::USER1和CameraFlag::USER2的相機看到的。我們還要注意如果你的精靈是在layer設(shè)置cameraMask之后添加的,它是不會被看到的,還需要手動再設(shè)置精靈的cameraMask。不要以為這樣就可以了,最后我們還要把相機添加到場景中,不然我們還是看不到效果的,一定要記住呀,下圖就是把相機加到場景中的代碼:

這樣一來我們就算是創(chuàng)建好相機啦,這只還是第一部喲,下面我來說下相機在游戲中是如何使用的。

?

一般來說在3D游戲中相機有三種使用方式:

  • 第一種就是自由相機

  • 第二種是第一人稱相機

  • 第三種是第三人稱相機

?

下面我們先來說第一種自由相機,這種類型的相機一般都多用在即時戰(zhàn)略類型的游戲中,比如魔獸爭霸3用的就是自由相機,這類相機可以隨著鼠標的移動而移動,能夠看到游戲場景中的任何位置,下圖就是自由相機在Cocos2d-x中的使用方法:

怎么樣是不是很簡單,我們其實只要在移動函數(shù)中把在屏幕移動的距離賦值給相機,讓相機跟隨移動就可以了,需要注意的是我們在屏幕上上下移動相對于相機是前后移動,所以我們要把在屏幕移動的y值賦給相機的z,而且方向是反的因為我們向下滑屏幕相機是向前移動下上滑相機是向后移動。那么大家會問,我們既然是3D相機那么y軸怎么移動吶?下圖就是相機拉近和拉遠的實現(xiàn):

第一張圖是拉近,第二張圖是拉遠。這樣我們也可以用Cocos2d-x來制作魔獸爭霸3這樣的游戲啦。

?

接下來我們來看第二種類型的相機,那就是第一人稱的相機,這種相機其實很好理解,它就相當于是我們的眼睛看到的東西,這種相機多用在FPS類型的游戲中,像是使命的召喚就是這類相機,那么它能不能在Cocos2d-x中實現(xiàn)吶?答案是肯定的,我們來看下圖:

其實就是把相機的位置綁在你在游戲中控制的角色上就可以啦,我們使用sprite3d的移動來代替在屏幕上滑動,也就是說我們在屏幕上滑動不是控制相機而是控制sprite3d,再把sprite3d的移動賦給相機,大家可能會問FPS游戲還可以旋轉(zhuǎn)視角呀?咱們的相機可以實現(xiàn),下面讓我們來看代碼:

這個是向左旋轉(zhuǎn)。

這個是向右旋轉(zhuǎn)。

通過這樣的設(shè)置我們就能實現(xiàn)FPS游戲的效果了。

?

最后再來介紹下第三人稱的相機,這類的相機多應(yīng)用在MMORPG類型游戲中,這種類型的游戲是我們最最常見的游戲類型,現(xiàn)在大多數(shù)的網(wǎng)游都是這樣的相機,它其實就是把第一人稱的相機的位置設(shè)定在我們控制的角色身后一定距離的位置上,以便我們能看清自己操控的游戲角色,在Cocos2d-x中的實現(xiàn)和第一人稱相機類似,相同的部分我們就不再說明了就是在得到角色位置賦值給相機后再把相機的位置加上個偏移量就可以了,偏移量我們用offset表示,如下圖:

其他的像移動和旋轉(zhuǎn)和第一人稱相機是一樣的,我就不在這里贅述了,這樣就可以實現(xiàn)第三人稱的相機了


3D相機使用教程的評論 (共 條)

分享到微博請遵守國家法律
新乡县| 车险| 大厂| 呼伦贝尔市| 罗田县| 孟州市| 会昌县| 莱芜市| 定南县| 枣强县| 华坪县| 靖安县| 阳泉市| 瓮安县| 聊城市| 石林| 衡阳县| 斗六市| 茶陵县| 榆社县| 巴中市| 沈阳市| 合江县| 垣曲县| 乌拉特后旗| 百色市| 晋州市| 宜丰县| 盐津县| 大丰市| 盐亭县| 邢台市| 龙南县| 庆元县| 永福县| 邛崃市| 阿拉尔市| 芜湖县| 曲周县| 锡林浩特市| 昆明市|