• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Havok引擎的物理碰撞與檢測技術(shù)的研究與實(shí)現(xiàn)

      2021-11-03 13:21林海
      現(xiàn)代信息科技 2021年8期

      DOI:10.19850/j.cnki.2096-4706.2021.08.034

      摘? 要:在Director開發(fā)平臺下首先對Havok引擎進(jìn)行初始化,其次設(shè)置場景中的重力、模型質(zhì)量、剛體等各方面的屬性,通過Havok引擎模擬真實(shí)的物理碰撞。最后對剛體與剛體、剛體與非剛體的碰撞檢測進(jìn)行分析研究,得出結(jié)論:基于Havok引擎的物理碰撞與檢測技術(shù)在Director開發(fā)平臺下適合游戲開發(fā)、模擬復(fù)雜的物理現(xiàn)象等虛擬現(xiàn)實(shí)的制作。

      關(guān)鍵詞:剛體;Havok引擎;碰撞檢測

      中圖分類號:TP391.9? ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2021)08-0122-03

      Research and Implementation of Physical Collision and Detection Technology?Based on Havok Engine

      LIN Hai

      (Zhanjiang Preschool Education College,Zhanjiang? 524084,China)

      Abstract:Under the Director development platform,the Havok engine is initialized firstly,and then the gravity,model quality,rigid body and other attributes in the scene are set. The Havok engine simulates real physical collisions. Finally,the collision detection between rigid body and rigid body,rigid body and non-rigid body is analyzed and researched,and it is concluded that the physical collision and detection technology based on Havok engine is suitable for virtual reality production such as game development and simulation of complex physical phenomena under the Director development platform.

      Keywords:rigid body;Havok engine;collision detection

      0? 引? 言

      近年來,碰撞與檢測技術(shù)[1,2]已經(jīng)越來越成為三維虛擬現(xiàn)實(shí)、機(jī)器人、動畫仿真等領(lǐng)域研究的熱點(diǎn),在目前成功的商業(yè)3D虛擬現(xiàn)實(shí)項(xiàng)目中,普遍采用的碰撞檢測是BSP樹與包裝盒相結(jié)合的方式。

      基于BSP樹[3]的碰撞檢測主要應(yīng)用于復(fù)雜形態(tài)模型的精確的碰撞檢測,但它需要很長的預(yù)處理時間,因此不適合加載時運(yùn)算,BSP劃分經(jīng)常會產(chǎn)生比原多邊形數(shù)多三到四倍的多邊形,即使不用保存顏色、法線、uv等物體信息也要增加將近一倍的內(nèi)存容量。

      基于包裝盒的碰撞檢測[4],主要應(yīng)用于簡單形態(tài)或者可以視其為簡單形態(tài)的模型碰撞檢測。采用一個正方體或者球型體包裹住3D物體對象整體來代表物體,用于描述區(qū)域,之后根據(jù)描述區(qū)域的位置與距離等信息來檢測是否發(fā)生碰撞。

      碰撞檢測技術(shù)[5]已成為計算幾何、計算機(jī)動畫、仿真機(jī)器人、CAD/CAM、3D游戲開發(fā)、物理仿真等領(lǐng)域中的一個熱點(diǎn)問題,而日趨復(fù)雜的虛擬環(huán)境的真實(shí)感和實(shí)時性對碰撞檢測提出了更高的要求,比如,虛擬人物在場景中可以自由移動,當(dāng)遇到一定高度內(nèi)的障礙物能夠走上去,而過高的障礙物則不能行走,遇到較小的斜坡可以走上去,陡坡過大則把人擋住,無法繼續(xù)行走。在各種前進(jìn)方向被擋住的情況下,都要盡可能地讓人物沿合理的方向行走而不是直接卡住。滿足這些要求的同時,還要注意防止人物在某種檢測不到的情況下穿墻或掉出場景以外的區(qū)域。

      本文以Director為開發(fā)平臺,實(shí)現(xiàn)Havok物理引擎的加載,并采用BSP樹及包裝盒方式的碰撞檢測技術(shù),對場景建構(gòu)以及對象的碰撞與檢測進(jìn)行研究。

      1? Havok Physics物理引擎簡介

      Havok物理引擎全稱為Havok Game Dynamics,SDK,中文名為Havok游戲動力開發(fā)包。它將物理運(yùn)動定律引入到虛擬場景中,增加了項(xiàng)目的交互性和互動性,內(nèi)置了物理碰撞檢測函數(shù),方便了游戲的開發(fā)。目前應(yīng)用廣泛的物理引擎有Havok的Havok Physics物理引擎和NVIDIA的PhysX引擎,其中Havok Physics物理引擎是物理模擬計算引擎界的領(lǐng)軍者。

      2? Director軟件簡介

      Director是由美國Adobe公司開發(fā)的一款用于多媒體項(xiàng)目開發(fā)的功能全面的軟件。廣泛應(yīng)用于CAI教學(xué)課件、網(wǎng)絡(luò)交互式等多媒體查詢系統(tǒng)、企業(yè)多媒體形象展示。Director有豐富的第三方工具集,比如數(shù)據(jù)庫插件,可以制作數(shù)據(jù)庫管理軟件等。其強(qiáng)大的Shockwave 3D引擎[6],能開發(fā)出生動形象的3D游戲。

      3? 構(gòu)建基于Havok引擎的真實(shí)的物理碰撞場景

      Havok Physics開發(fā)中,首先需要定義各種不同的角色(actor),并對每個角色的形狀(shape)屬性和剛體(body)屬性進(jìn)行設(shè)置;最后,把這些角色都加入到場景(scene)空間中,這樣就能構(gòu)造出一個完整的虛擬實(shí)現(xiàn)世界。剛體可分為固定剛體、活動剛體兩類,固定剛體受到碰撞后不可動,活動剛體受到碰撞后將產(chǎn)生相應(yīng)的運(yùn)動。

      本文以公路作為Havok物理引擎測試場景,設(shè)定2部汽車為活動剛體,公路和基圍欄為固定剛體研究Havok物理引擎各種的碰撞檢測和檢測機(jī)制。

      3.1? 導(dǎo)入3DMAX場景模型

      在3D MAX中制作出基礎(chǔ)場景模型后,導(dǎo)出為Shockwave 3D場景,生成擴(kuò)展名為W3D的文件,在Director直接導(dǎo)入該文件,生成一個Shockwave 3D角色,如圖1所示。

      在圖1中,小轎車為用戶可控制的車輛,名稱為“car”;出租車為靜止的車輛,名稱為“car2”;畫面右上角的紅色半透明面為路標(biāo)檢測,用于判斷車輛是否通過該面,名稱為“pla”。

      3.2? 設(shè)置虛擬場景的Havok屬性

      3.2.1? 設(shè)置Havok初始參數(shù)

      在Havok整合初步計算階段,進(jìn)行物理對象的一些初始物理狀態(tài)的初始化,包括重力、場景模型等各項(xiàng)信息,為后面的運(yùn)算做準(zhǔn)備。主要語句為:

      pMember = member(1)? --3D場景角色編號

      pHavok = member(2)? -- pHavok場景角色編號

      pHavok.initialize(pMember,1,1)–havok環(huán)境與Shockwave 3D環(huán)境通過初始化而建立連接,從而使在havok環(huán)境中的模擬運(yùn)算可以影響Shockwave 3D模型。

      phavok.gravity = vector( 0, 0, -386 )

      --pHavok為場景的矢量重力大小,-386為向下的重力,值越大,剛體下落速度越快;值越小,剛體下落速度越慢。

      3.2.2? 設(shè)置各模型的剛體屬性

      剛體與常規(guī)表面不同,在模擬過程中,剛體會發(fā)生碰撞而不是彼此穿插。

      小轎車模型的剛體屬性設(shè)置語句為:

      pCar=pHavok.makeMovableRigidBody(“car”,1000)

      說明:設(shè)置小轎車為活動剛體,質(zhì)量為1000Kg,模擬了真實(shí)小轎車的重量,碰撞檢測方式為BSP樹。

      出租車模型的剛體屬性設(shè)置語句為:

      pHavok.makeMovableRigidBody(“car”,1000, true, #box)

      說明:設(shè)置出租車為活動剛體,設(shè)置為活動剛體,1000Kg,碰撞檢測方式為包裝盒。

      公路和路基的剛體屬性設(shè)置為固體剛體設(shè)置語句為:pHavok.makeFixedRigidBody(“Highway”,false)。

      路標(biāo)檢測的平面由于允許剛體穿越,所以不設(shè)置為剛體

      3.2.3? 虛擬場景的真實(shí)模擬

      加入幀腳本事件,開始虛擬場景的真實(shí)模擬。語句為:

      on exitframe me

      pHavok.step()--開始模擬

      end

      3.2.4? 控制小轎車的行駛

      Havok為Director用戶提供了方便的角色控制行為庫,可以通過簡單的Drive model行為實(shí)現(xiàn)小轎車的模擬駕駛。圖2為Drive model行為的設(shè)置。

      設(shè)置好行為后,小轎車可通過→、←、↑、↓四個方向鍵來控制汽車的行駛。

      經(jīng)過以上的幾步設(shè)置,小轎車已經(jīng)具備剛體屬性已經(jīng)可以在虛擬場景的公路中自由行駛,可以和其它剛體產(chǎn)生真實(shí)的碰撞效果而不會彼此穿越了。

      4? Havok引擎物理碰撞檢測技術(shù)的應(yīng)用

      4.1? 剛體與剛體的碰撞檢測

      剛體與剛體的碰撞檢測應(yīng)用范圍廣泛,如:交通事故模擬、虛擬裝配、虛擬場景漫游等。剛體的碰撞檢測主要通過registerInterest函數(shù)實(shí)現(xiàn)。RegisterInterest將事件與模型綁定,當(dāng)模型發(fā)生碰撞時呼叫它。

      registerStepCallback是一個注冊碰撞檢測的處理程序,將在每一個物理模擬的副步(sub step)被呼叫一次。它通過精靈腳本事件進(jìn)行注冊。本實(shí)例中主要檢測黃色小轎車的碰撞,注冊處理語句為:

      pHavok.registerInterest( pCar.name, #all, 0, 0, #collisionHandler, me )

      說明:pCar為小轎車剛體對象。檢測所有的剛體碰撞對象。

      pHavok.registerStepCallback( #controlCharacter, me )

      說明:將碰撞檢測的結(jié)果發(fā)回controlCharacter子程序中,將返回一個名稱為details的數(shù)組列表,再通過if語句來判斷在碰撞對象中是否有黃色小轎車“car2”的存在,語句為:

      if chars(details[2],1,3)="car2" then

      put details[2]

      end if

      4.2? 剛體與非剛體的碰撞檢測

      剛體與非剛體產(chǎn)生碰撞后可以穿透非剛體對象,常用于一些路標(biāo)檢測等監(jiān)測剛體是否到達(dá)指區(qū)域而又不影響剛體運(yùn)動的情況,如賽車游戲中,對賽車通過路段的檢測。

      首先要制作一個剛體的子對象,該子對象一直跟隨主剛體,但不設(shè)置為剛體屬性,只用于非剛體的碰撞檢測。該子象的設(shè)置語句為:

      member("aaa").model("car2dl").parent=member("aaa").model("car2")

      其次,開啟子對象”car2dl”的碰撞檢測,語句為:member("aaa").model(rwd).collision.enabled = true

      最后,注冊碰撞檢測處理程序,語句為:

      member("aaa").model("car2dl").collision.setCollisionCallback ( #mCollide, me )

      說明:將碰撞檢測的結(jié)果發(fā)回mCollide子程序中,將返回一個名稱為collisionData的對象,再通過collisionData.modelB來判斷是否與子對象“car2dl”產(chǎn)生碰撞,語句為:

      tWaypoint=collisionData.modelB

      tName=tWaypoint.name

      put tName

      5? 結(jié)? 論

      在Director開發(fā)平臺下首先通過pHavok.initialize語句實(shí)現(xiàn)Havok引擎的初始化,再設(shè)置場景中的重力,模型質(zhì)量、剛體等各方面的屬性,最后通過pHavok.step()語句開始模擬真實(shí)的物理碰撞。在碰撞發(fā)生后通過pHavok.registerInterest語句實(shí)現(xiàn)剛體與剛體的碰撞檢測,通過collision.setCollisionCallback語句實(shí)現(xiàn)剛體與非剛體的碰撞檢測?;贖avok引擎的物理碰撞與檢測技術(shù)在Director開發(fā)平臺下的應(yīng)用具有開發(fā)步驟簡便,效率高的特點(diǎn),適合游戲開發(fā)、模擬復(fù)雜的物理現(xiàn)象等虛擬現(xiàn)實(shí)的制作。

      參考文獻(xiàn):

      [1] 李政峰,王青霞,肖昱鋒.Unity3D碰撞檢測技術(shù)在電力設(shè)備虛擬裝配中的應(yīng)用 [J].科學(xué)技術(shù)創(chuàng)新,2020(30):104-105.

      [2] 張森森,金國棟,王五桂,等.船舶操縱模擬器三維視景場景構(gòu)建及碰撞檢測 [J].船電技術(shù),2020,40(S1):24–27.

      [3] 孫巍,劉金義.基于物體級BSP樹的大規(guī)模室外場景渲染 [J].微處理機(jī),2010,31(6):67–70+74.

      [4] 陳華.確定任意形狀物體最小包圍盒的一種方法 [J].工程圖學(xué)學(xué)報,2010,31(2):49–53.

      [5] 曲慧雁.復(fù)雜虛擬環(huán)境下的快速碰撞檢測技術(shù)研究 [D].長春:吉林大學(xué),2020.

      [6] 羅立宏,譚夏梅.基于ShockWave3D的Web虛擬現(xiàn)實(shí)技術(shù)研究 [J].科技資訊,2007(4):101–102.

      作者簡介:林海(1976.10—),男,漢族,廣東湛江人,講師,本科,研究方向:虛擬現(xiàn)實(shí)技術(shù),人工智能。

      收稿日期:2021-03-05

      課題項(xiàng)目:湛江幼兒師范??茖W(xué)校校級課題(2019ZYCQ33)

      遵化市| 郧西县| 乌恰县| 岳西县| 曲阜市| 旌德县| 浦东新区| 云林县| 天门市| 富裕县| 澄城县| 南城县| 文水县| 灌阳县| 海淀区| 兴山县| 凤山市| 牡丹江市| 盐津县| 勃利县| 阳西县| 竹北市| 沈丘县| 曲水县| 南通市| 平顶山市| 常州市| 西平县| 鸡西市| 万载县| 忻城县| 定结县| 高碑店市| 望江县| 横山县| 温泉县| 和顺县| 盘锦市| 溧阳市| 昭平县| 安陆市|