• 
    

    
    

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

      ?

      Unity中使用貝塞爾曲線對三維物體進行彎曲

      2016-09-20 07:22:34吳曉亮黃襄念西華大學計算機與軟件工程學院成都610039
      現(xiàn)代計算機 2016年7期
      關鍵詞:貝塞爾百分比頂點

      吳曉亮,黃襄念(西華大學計算機與軟件工程學院,成都 610039)

      Unity中使用貝塞爾曲線對三維物體進行彎曲

      吳曉亮,黃襄念
      (西華大學計算機與軟件工程學院,成都610039)

      0 引言

      三維物體在三維制作軟件中進行彎曲,是很常見的。但是當導出模型到游戲引擎后就無法再改變形狀,而現(xiàn)在一些虛擬現(xiàn)實的軟件中,經(jīng)常需要對三維物體進行實時的彎曲,如管道等。要想在游戲引擎中對三維物體進行變形,就只有通過算法編程進行實現(xiàn)[1]。而管道等這些長條型物體,可以看成一條粗的線,只不過這條線主要靠的是網(wǎng)格,而形成網(wǎng)格的基礎就是網(wǎng)格點,通過使用貝塞爾曲線控制網(wǎng)格點,就可以控制三維物體的形狀,達到彎曲變形的目的。

      1 貝塞爾曲線

      貝塞爾曲線是一種應用于二維圖形應用程序的數(shù)學曲線。貝塞爾曲線由線段與節(jié)點組成,節(jié)點是可拖動的支點,線段像可伸縮的皮筋。通過拖動節(jié)點,可以改變線段的彎曲程度和彎曲方向。貝塞爾曲線有線性公式、二次方公式、三次方公式和一般參數(shù)公式,分別對應兩個節(jié)點、三個節(jié)點、四個節(jié)點和任意節(jié)點的貝塞爾曲線。由于這里只會用到四個節(jié)點,所以只敘述三次方公式。

      貝塞爾曲線的定義有四個點:起始點、終止點(也稱錨點)以及兩個相互分離的中間點?;瑒觾蓚€中間點,貝塞爾曲線的形狀會發(fā)生變化。

      如圖1,定義四個頂點P0、P1、P2、P3,曲線從P0走向P3,并不會經(jīng)P1、P2兩點。這兩個點只是在那里提供方向信息。P0和P1之間的間距,決定了曲線在趨進P3之前,走向P2方向的長度有多長。

      貝塞爾曲線公式[2]:

      B(t)=P0(1-t)3+3P1t(1-t)3+3P2t2(1-t)+P3t3,t∈[0,1]

      上述公式中,參數(shù)t可看做是線段百分比所在的位置,如圖2所示。

      2 彎曲的實現(xiàn)

      三維物體的形成,主要靠的就是網(wǎng)格,而網(wǎng)格的形成則需要網(wǎng)格頂點。如圖3-1所示的,就是一個圓柱體的網(wǎng)格,在建模的時候,都會看見模型上有著密密麻麻的網(wǎng)格,在網(wǎng)格的邊相交的地方就是網(wǎng)格頂點,通過改變這些網(wǎng)格頂點的位置,相應的網(wǎng)格就會發(fā)生形狀變化,從而讓模型的形狀發(fā)生改變。

      圖1 貝塞爾曲線效果圖

      圖2 生成示意圖

      在Unity中,模型導入后形狀就會固定,達不到想要彎曲變形的目的。要想在Unity中對模型實時操作變形,就需要通過算法來實現(xiàn)。

      Unity中的網(wǎng)格信息是通過 GameObject的 Mesh-Filter組件中的mesh屬性來獲取。所以想要進行網(wǎng)格操作,必須為游戲?qū)ο筇砑右粋€MeshFiler游戲組件,而MeshFiler中的mesh屬性中包含了三維游戲模型的法線、UV坐標、三角形和vertices頂點數(shù)組屬性。三角形屬性并不是單獨保存,而是通過頂點數(shù)組間接保存。數(shù)組不使用特殊類表示三角形,而只是一個簡單的整數(shù)指數(shù)列表。每一個三角形都是以三個點為一組,因此,前三個元素定義為第一個三角形,之后的三個元素定義為第二個三角形,并依此類推。

      圖3 三維網(wǎng)格

      要對三維物體進行變形,只需要獲得這組頂點數(shù)組,將每一個頂點的位置通過貝塞爾曲線算法進行計算,重新定位即可。具體算法如下[3]:

      (1)將三維物體導入Unity引擎中,為其添加Mesh-Filer組件,通過它獲取物體的mesh屬性,再通過mesh獲取物體的網(wǎng)格頂點vertices屬性。

      (2)為物體創(chuàng)建一條貝塞爾曲線。在三維物體的兩端加入兩個子物體,對應好位置,通過引擎提供的In-verseTransformPoint()函數(shù)將兩個子物體的坐標點轉化為三維物體的本地坐標點,并將此兩點作為三階貝塞爾曲線的兩個端點。再在此兩點中間任取兩點,將其作為貝塞爾曲線的錨點。有了這四個頂點,就可以根據(jù)三階貝塞爾曲線公式計算出一條適用于這個三維物體的一條曲線。

      (3)將獲取到的mesh屬性的vertices數(shù)組取出,根據(jù)自己的物體要彎曲的軸向,選擇相應的X、Y、Z軸,并找出相應軸的最大值和最小值,相減獲得物體的總長,再將每個點對應的值和最小值相減并除以總長,得到每一個網(wǎng)格頂點在物體中的百分比。

      (4)將百分比值傳給貝塞爾曲線,計算出貝塞爾曲線對應的百分比所在點,并計算出此百分比對應的前一個點和后一個點。

      (5)通過叉乘,計算出這個百分比所在的貝塞爾曲線上的切線方向和垂直方向的偏移量。

      (6)將此切線偏移量和垂直偏移量和三維物體的vertices屬性中對應百分比的點相加,得到新的網(wǎng)格頂點。

      (7)重復上述(3)到(6)的操作步驟,計算出每一個網(wǎng)格頂點的值。如此得到一個新的網(wǎng)格頂點數(shù)組,將此數(shù)組賦給vertices得到新的vertices頂點屬性,就改變了三維物體網(wǎng)格頂點的位置,從而使物體發(fā)生彎曲(如下圖)。

      圖4 三維物體彎曲

      3 結語

      本文給出了利用貝塞爾曲線對三維物體進行彎曲的實現(xiàn)算法,并且對Unity中的網(wǎng)格屬性進行了簡單的說明,使大家對網(wǎng)格有簡單的認識,在實現(xiàn)算法時有一定的幫助。但是在Unity中實現(xiàn)此算法,需要掌握一些Unity3D的API[4],使用這些API進行計算,可以減少許多不必要的實現(xiàn)代碼,可以大大地簡化此算法的實現(xiàn)。

      此算法擴大了貝塞爾曲線的應用,不只是局限于應用在二維平面中的線條,如今也可以應用于三維的條形狀物體,具有一定的創(chuàng)新性。

      [1]丁德紅,方逵,饒大鵬,敬松.三維植物花朵動態(tài)仿真模型技術研究與實現(xiàn)[J].農(nóng)機化研究,2014(5)

      [2]王竹溪,郭敦仁著.特殊函數(shù)概論[M].北京:北京大學出版社,2012.

      [3]陳江.VC實現(xiàn)貝塞爾曲線繪制[J].科技經(jīng)濟市場,2011(5)

      [4]陳泉宏著.Unity API詳解[M].北京:人民郵電出版社,2014.

      [5]克利福德·彼得斯(Clifford Peters),斯特·奈·斯瑞(Thet Naing Swe)著.Unity 3D人工智能編程[M].李秉義譯.北京:機械工業(yè)出版社,2015.

      Bezier Curve;3D Object;Mesh Vertex;Bend

      Using Bezier Curve to Bend 3D Objects in Unity

      WU Xiao-liang,HUANG Xiang-nian
      (School of Computer and Software Engineering,Xihua University,Chengdu610039)

      1007-1423(2016)07-0057-03

      10.3969/j.issn.1007-1423.2016.07.013

      吳曉亮(1994-),男,四川簡陽人,本科,研究方向為Unity開發(fā)

      2016-01-26

      2016-02-26

      隨著虛擬現(xiàn)實的發(fā)展,在游戲引擎中對三維物體進行彎曲效果的模擬越來越重要。在三維游戲引擎中,需要對一些三維的物體進行彎曲,以達到游戲操作中實時模擬物體彎曲。貝塞爾曲線算法是一個在計算機圖形中常用的算法,被用于各類圖形制作軟件中,如Photoshop等軟件,但多限于二維線條的應用,在三維物體上的應用較少。通過貝塞爾曲線算法結合三維物體的網(wǎng)格頂點,可以實現(xiàn)對條形三維物體進行彎曲變化。

      貝塞爾曲線;三維物體;網(wǎng)格頂點;彎曲

      2014年國家級大學生創(chuàng)新訓練項目(No.201410623012)

      黃襄念(1964-),男,四川人,教授,研究方向為圖像/文字識別技術與系統(tǒng)、智能視頻監(jiān)控技術與系統(tǒng)、三維游戲圖形引擎技術與系統(tǒng)、體感交互技術與虛擬現(xiàn)實系統(tǒng)

      With the development of virtual reality,it’s increasingly important to simulate bending effect of 3D objects in game engine.In order to re-al-time simulate the bending of object in the 3D game engine,it needs to bend some 3D objects.Bezier curve algorithm is one of the common algorithms in computer graphics,which is used in all kinds of graphics software,such as Photoshop and so on.It is usually used in 2D lines while rarely in 3D objects.By combining Bezier curve algorithm with mesh vertex of the 3D objects,it can achieve to bend the bar 3D objects.

      猜你喜歡
      貝塞爾百分比頂點
      過非等腰銳角三角形頂點和垂心的圓的性質(zhì)及應用(下)
      看星星的人:貝塞爾
      少兒科技(2021年3期)2021-01-20 13:18:34
      關于頂點染色的一個猜想
      山東科學(2018年6期)2018-12-20 11:08:58
      基于虛宗量貝塞爾函數(shù)的螺旋帶色散模型
      普通照明用自鎮(zhèn)流LED燈閃爍百分比測量不確定度分析
      電子制作(2017年20期)2017-04-26 06:57:46
      肝癌患者外周血Treg、Th17百分比及IL-17水平觀察
      一種脈沖貝塞爾波的構造及其非線性聲場的仿真
      高階貝塞爾光束的Z掃描理論
      商貿(mào)投資最適宜國家和地區(qū)
      海外星云 (2012年24期)2012-04-29 00:30:09
      數(shù)學問答
      崇文区| 绥滨县| 菏泽市| 辽源市| 寿宁县| 若尔盖县| 乳源| 保山市| 遂宁市| 区。| 南昌市| 高雄市| 益阳市| 通榆县| 乐都县| 新郑市| 临漳县| 广州市| 迁安市| 长垣县| 嘉义市| 万荣县| 湘乡市| 磴口县| 鹤峰县| 黑水县| 澜沧| 霍林郭勒市| 无棣县| 望奎县| 临颍县| 营山县| 湾仔区| 五原县| 临潭县| 晋州市| 邮箱| 巴彦淖尔市| 廊坊市| 清苑县| 乡城县|