freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于unity3d的汽車駕駛游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(已改無(wú)錯(cuò)字)

2023-07-25 04:09:49 本頁(yè)面
  

【正文】 家?guī)?lái)天空是在極遠(yuǎn)處的錯(cuò)覺(jué)。但在較為復(fù)雜的應(yīng)用中,還需要使用天空盒的紋理來(lái)生成 Cube Map,并用之來(lái)做水面倒影、云影等特效的貼圖。圖 42 天空盒由六個(gè)面映射而成在 Unity3D 中對(duì)天空盒有很好的支持,開(kāi)發(fā)人員只需要幾個(gè)簡(jiǎn)單的步驟:華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)16; Shader 為 Unity3D 自帶的 RenderFXSkybox;; Render Setting 中設(shè)置天空材質(zhì)為前面創(chuàng)建的材質(zhì)。圖 43 為實(shí)現(xiàn)的效果圖:圖 43 實(shí)現(xiàn)的天空效果2. 水面水面的本質(zhì)即按照流體規(guī)律動(dòng)態(tài)更新頂點(diǎn)位置的網(wǎng)格,Unity3D 中的自帶有水的對(duì)象,但為了使得水面具有更真實(shí)的表現(xiàn)力,還要為水面加入反射、折射等效果,這些效果主要是通過(guò)渲染到紋理(RendertoTexture,RTT)來(lái)實(shí)現(xiàn)。渲染到紋理,簡(jiǎn)單來(lái)說(shuō)就是把當(dāng)前場(chǎng)景的一部分或者全部渲染成一個(gè)可以使用的紋理上面,然后再另外一次渲染中把它當(dāng)作普通的紋理使用。光穿過(guò)水面,但被水面改變傳播方向又返回水面之上叫做反射。如圖 44 所示,向量 I 被稱為入射光線(incident ray) ,從眼睛射到物體表面,當(dāng) I 到達(dá)表面的時(shí)候,它會(huì)根據(jù)表面的法向量 N 被從 R 方向反射出去,第二條光線是被反射光線(reflected ray) ,所以可以根據(jù)向量 I 和 N 用公式 41 計(jì)算被反射的向量 R:華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)17圖 44 光線反射圖公式 41折射與反射不同的是,光線雖然改變角度但依然進(jìn)入水面,斯涅耳定律描述了兩種媒介之間的分界面光發(fā)生了什么,如圖 45 所示,折射向量被表示為 T,代表“transmitted”。斯涅耳定律在數(shù)學(xué)上可以用公式 42 表示。圖 45 斯涅耳折射定律公式 42具體代碼實(shí)現(xiàn)中,我們以折射為例,我們首先將要被折射的物體加入到一個(gè)層——m_RefractLatyer 中,然后設(shè)置一個(gè)攝像機(jī)用于渲染這個(gè)層上的所有物體,得到紋理_RefractionTex 并傳給 shader,然后在水面進(jìn)行紋理混合計(jì)算。以下為實(shí)現(xiàn)折射效果的關(guān)鍵代碼和水面效果截圖:華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)18代碼清單 46 折射 RTT 關(guān)鍵代碼圖 47 帶有折射、反射的水面效果3. 地形 [9]在 Unity3D 中通過(guò)高度圖來(lái)實(shí)現(xiàn)地形,高度圖實(shí)際上是一張矩形的灰度圖,在灰度模式中,顏色通過(guò) 0~255 來(lái)表示,0 代表黑色,255 代表白色,像素越亮代表地勢(shì)越高,255 的像素代表此次頂點(diǎn)最高,反之亦然,所以像素灰度值和頂點(diǎn)的高度可以用公式 43 表示,其中 L 為像素的灰度值, 、 分別為 Unity3D 中定義????????????????????的地形高度和地形最低點(diǎn),求得網(wǎng)格頂點(diǎn)的高度 y。公式 43??=??????????????255+????????程序在需要渲染地形時(shí)通過(guò)讀取這張圖片,并按照灰度生成頂點(diǎn)高度不一的矩形網(wǎng)格。這樣大大減少了游戲模型體積。Unity3D 中的地形模塊不但可以導(dǎo)入高度圖,還可以用筆刷為繪制地形紋理、樹(shù)、華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)19草和巖石,所見(jiàn)即所得,大大減少了開(kāi)發(fā)人員的工作量。圖 48 為小島的效果圖:圖 48 小島地形效果圖4. 光照和投影在一般 3D 應(yīng)用程序中,光照和投影是各自獨(dú)立的計(jì)算過(guò)程,光照既可以使用固定管線、也可以再 Shader 自定光照模型實(shí)現(xiàn)。投影則是一個(gè)雙過(guò)程的技術(shù) [10]:,場(chǎng)景以光源的位置為視點(diǎn)被渲染。每個(gè)渲染圖像的像素的深度值被記錄在一個(gè)“深度紋理”中,被稱為陰影貼圖。,場(chǎng)景從眼睛的位置渲染,但是用標(biāo)準(zhǔn)的投影紋理把陰影貼圖從燈的位置通過(guò)投影矩陣運(yùn)算混合到場(chǎng)景中。在每個(gè)像素,深度采樣值(從被投影的深度紋理中)與片段到燈的距離進(jìn)行比較。如果后者小,這意味著這個(gè)片段不是陰影,不需要和投影紋理進(jìn)行混合。圖 49 舉例說(shuō)明了陰影的深度比較。在圖的左邊,正要被著色的點(diǎn) P 在陰影中,因?yàn)檫@個(gè)點(diǎn)的深度值(Z B)比記錄的陰影貼圖的深度值(Z A)大。相反,在圖的右邊顯示了點(diǎn) P 的深度值與在陰影貼圖中記錄的值相同的情況。這意味著在在 P 和燈源之間沒(méi)有任何物體,因此 P 不再陰影中。華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)20圖 49 投影的深度比較對(duì)于靜態(tài)物體的投影渲染的第一過(guò)程計(jì)算,可以在游戲開(kāi)發(fā)過(guò)程中進(jìn)行。Unity內(nèi)置的光照貼圖烘培工具是 Illuminate Labs 的 Beast,其主要原理是對(duì)場(chǎng)景中所有靜態(tài)物體的光照和投影進(jìn)行計(jì)算, 光照貼圖格式用以記錄光照和投影兩種信息,在游戲運(yùn)行時(shí)用光照貼圖對(duì)模型原有材質(zhì)進(jìn)行混合渲染,即可得到正確的光照和投影效果。這樣大大減少了游戲運(yùn)行過(guò)程中計(jì)算量,提高游戲效率。如圖 410 所示,進(jìn)行一些參數(shù)設(shè)置(實(shí)際上是設(shè)置光照模型和投影過(guò)程二的陰影紋理) ,選擇“Bake Scene”即可為場(chǎng)景生成光照貼圖。圖 410 光照貼圖烘焙窗口華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)21(二) 場(chǎng)景物理仿真實(shí)現(xiàn)如前文提到,Unity3D 內(nèi)置對(duì) Nvidia PhysX 支持,其實(shí)際工作就是封裝了一些游戲中常用的組件以及腳本中調(diào)用的類,只要將這些碰撞體組件賦予游戲?qū)ο?,就被加?PhysX 虛擬世界進(jìn)行運(yùn)算。下面主要介紹常用組件:剛體(Rigid):在 PhysX 的基本概念中,兩個(gè)碰撞體發(fā)生碰撞必須要求其中至少有一個(gè)剛體。所以對(duì)運(yùn)動(dòng)的物體要賦予剛體屬性,剛體可設(shè)置質(zhì)量、重力計(jì)算、碰撞檢測(cè)頻率等屬性。網(wǎng)格碰撞體(Mesh Collider):根據(jù)游戲玩法,玩家通過(guò)車身前部撞擊其他車的后部進(jìn)行游戲,在車身前部和后部各加入一個(gè)網(wǎng)格碰撞體,網(wǎng)格碰撞體可通過(guò)網(wǎng)格數(shù)據(jù)定義凸體形狀,比起基本碰撞體更加精確。地形碰撞體(Terrain Collider):通過(guò)地形模塊生成的地形可以選擇加入地形碰撞體,就這樣就可以不需要定義網(wǎng)格數(shù)據(jù)來(lái)定義網(wǎng)格碰撞體,其本質(zhì)就是根據(jù)高度圖生成的網(wǎng)格碰撞體。輪胎碰撞體(Wheel Collider):汽車經(jīng)常在陡峭的地形上行走,如果將輪胎定義為一般碰撞體則容易造成碰撞而導(dǎo)致車身飛起,輪胎碰撞體具有阻尼彈性和摩擦力的屬性,不同類型的車輛可以使用不同的輪胎碰撞體參數(shù),模擬出各種效果。彈簧連接體(Spring Joint):物體之間如果通過(guò)連接有力的作用,可通過(guò)設(shè)置連接體來(lái)實(shí)現(xiàn)。彈簧連接體能夠模擬物體之間的阻尼作用。如圖 411 所示,場(chǎng)景中需要進(jìn)行物理計(jì)算的主要有三種:地形、一些 3D 模型(如柵欄)和汽車,其中地形和 3D 模型為靜態(tài)物體,只要為其增加靜態(tài)碰撞體組件即可。而汽車的構(gòu)造較為復(fù)雜,首先在游戲中前車身和后車身為不同的積分部位,因此要定義為兩個(gè)網(wǎng)格碰撞體,并且為了得到真實(shí)的物理效果,需要將輪胎定義為車輪碰撞體并通過(guò)彈簧連接體與車身相連,如圖 412 所示。華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)2、 、、 、、 、、 、、、 、、圖 411 物理仿真模塊實(shí)現(xiàn)圖 412 汽車物理仿真的構(gòu)造(三) 汽車動(dòng)力學(xué)模擬進(jìn)行了汽車的物理組件裝配之后,還要實(shí)現(xiàn)汽車動(dòng)力學(xué)模型。由于汽車在駕駛過(guò)程中影響其運(yùn)動(dòng)情況的因素錯(cuò)綜復(fù)雜,操縱機(jī)構(gòu)對(duì)汽車的行駛存在著多輸入、多藕合、非線性的控制作用,而實(shí)時(shí)渲染游戲要求動(dòng)力學(xué)仿真計(jì)算快速,要在精確度與計(jì)算速度之間折中,需要簡(jiǎn)化動(dòng)力學(xué)模型 [11]。為了簡(jiǎn)化模型,作如下假設(shè):所有車輛都是剛體,不考慮多節(jié)車廂的情況。汽車在行駛過(guò)程中,因速度的變化受到引擎的驅(qū)動(dòng)力和阻力(動(dòng)摩擦力、空氣阻力) ,如果汽車在轉(zhuǎn)彎還會(huì)收到輪胎的側(cè)摩擦力,汽車行駛過(guò)程中的基本受力圖如 413 所示:華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)23圖 413 車輛行駛受力圖假設(shè)汽車當(dāng)前正在轉(zhuǎn)彎且速度為 v,且由于轉(zhuǎn)彎輪胎和車身的 z 軸并不重合,速度 v 在輪胎 x 軸方向的分量為 ,k 為阻力系數(shù),根據(jù)公式 44 可得出汽車受得的阻力 f 和輪胎側(cè)摩擦力 f 側(cè) :公式 44??=????2??側(cè) ∝(??.??)2汽車當(dāng)前引擎提供的驅(qū)動(dòng)力決定于汽車當(dāng)前的檔位,檔位由當(dāng)前速度大小決定,不同的車輛有不同的檔位設(shè)計(jì),為了控制汽車能達(dá)到的最大速度,使用二次線性增量法,v top表示汽車能達(dá)到的最大速度,n 表示該車當(dāng)前的檔位, vn表示達(dá)到該檔位的最低速度,F(xiàn) n表示 n 檔位收到的驅(qū)動(dòng)力,k 為公式 44 中的阻力系數(shù),這樣,速度、檔位、驅(qū)動(dòng)力之間關(guān)系可用公式 45 表示:公式 45??1=14??????????????????1=14(??????????????1) ????=??(?????1)2????????=??????????2根據(jù)以上得出的汽車動(dòng)力學(xué)模型,需要在 Unity3D 中通過(guò)腳本組件實(shí)現(xiàn),首先為汽車對(duì)象增加一個(gè)繼承自 MonoBehavior 的 腳本,在其中重寫(xiě)兩個(gè)更新函華東師范大學(xué)學(xué)士學(xué)位論文 基于 Unity 的車輛模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)24數(shù) Update()和 FixedUpdate(),Update()函數(shù)在每幀繪制之前調(diào)用一次,F(xiàn)ixedUpdate()通過(guò)一個(gè)計(jì)時(shí)器定時(shí)調(diào)用,時(shí)間間隔可在工程中設(shè)置。然后在這兩個(gè)更新函數(shù)進(jìn)行動(dòng)力學(xué)計(jì)算。以下為兩個(gè)更新函數(shù)的代碼及各個(gè)函數(shù)的作用,其中的計(jì)算公式中使用了大量的常量因子,不同的汽車可配置不同的參數(shù)以產(chǎn)生逼真的效果:代碼清單 414 的更新函數(shù)GetInput():得到當(dāng)前玩家的輸入,如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn);Check_If_Car_Is_Flipped():判斷汽車是否被撞翻,如果是的話,使汽車被翻正;UpdateWheelGraphics():根據(jù)汽車瞬時(shí)速度旋轉(zhuǎn)輪胎;UpdateGear():根據(jù)汽車瞬時(shí)速度變換檔位;UpdateFriction ():如果汽車在轉(zhuǎn)彎狀態(tài),輪胎會(huì)受到的側(cè)摩擦力,側(cè)摩擦力和瞬時(shí)速度的 x 軸分量的平方成正比,如公式 44;UpdateDrag ():計(jì)算當(dāng)前受到的阻力,阻力和速度的平方成正比,如公式 44;CalculateEnginePower ():根據(jù)當(dāng)前檔位計(jì)算引擎提供的動(dòng)力,如公式 45;ApplyThrottle ():根據(jù)引擎動(dòng)力使汽車剛體獲得向前力模擬油門效果;ApplySteering ():根據(jù)引擎動(dòng)力和玩家的轉(zhuǎn)向輸入使汽車剛體獲得側(cè)向力模擬轉(zhuǎn)彎效果。(四) 用戶圖形界面實(shí)現(xiàn)Unity3D 的另一個(gè)便利就是強(qiáng)大的插件功能,開(kāi)發(fā)人員可以定制自己功能的菜單欄選
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1