Unity繪製戶型(一)

2021-09-02 02:45:18 字數 1234 閱讀 3876

戶型繪製主要物件資料:點、線、面、部件(門窗)。主要難點是通過繪製的點尋找閉合多邊形、多邊形的生成、3d牆體的生成、門窗要在牆體上留下孔洞這四個功能。這篇文章我只寫前兩個問題,後面來兩個問題單獨再寫一篇文章。

1.如何尋找閉合多邊形?

我的方法是遍歷全部的點,剔除不參與構面計算的點。不參與構面計算的意思是指下圖所示的點

在我的設計中點物件是包含點的連線關係的,就是說點物件自己儲存著自己和誰連線在一起,所以點的連線個數小於1的都要捨去,例如圖中的黃點他只連線的乙個點,那麼這個點就要捨去。然後將剩下的點進行構面計算。構面計算的方法是:首先計算出點和它所連線點形成的角並進行排序,但這個角的計算方式比較特別。我是以x軸正方向為0角度,然後逆時針方向轉到相連點的角度。

具體計算方法;

首先計算出θ = arctan((y2 - y1) / (x2 - x1))

然後當x1 - x2 > 0 時, y1 - y2 > 0,α=θ

當x1 - x2 < 0 時, y1 - y2 > 0,α=θ + 180°

當x1 - x2 < 0 時, y1 - y2 < 0,α=θ + 180°

當x1 - x2 > 0 時, y1 - y2 < 0,α=θ + 360°

各個點的角度計算完畢後開始迴圈遍歷:

①首先選取任意點作為起始點從所連點中選擇角度最小的點形成起始邊,如果最小角度點被使用則選取反方向使用過一次的邊作為起始邊,再其次依據角度大小選擇。選取之後要記錄這條邊已經被使用,切還要記錄使用方向,因為正方向和反方向都要最少被使用一次。

②選取後續邊,若當前邊的角度不是與該結點有關邊的角度最大的邊則依據大小選取下一條邊,否則,則選取角度最小的邊作為後續邊。選取之後要記錄這條邊已經被使用,切還要記錄使用方向,因為正方向和反方向都要最少被使用一次。

③回到原點,構建乙個多邊形。再將該點作為起始點,依照第一條進行選擇。直到所有的相關點都被使用過再換下乙個點,當所有點都被使用過之後則程式完成。

2.多邊形生成

多邊形我是使用mesh來製作,mesh基礎知識不多說,頂點就是我們剛才找到的圍成多邊形的點,關鍵在於把這些點構成的面切割成三角形(渲染需要使用三角形)。我使用的演算法是耳切演算法。

關於Unity 動畫繪製原理

動畫繪製的原理 現在螢幕中確定動畫的顯示區域,然後將動畫中的每一幀按固定的時間在這個區域中按順序切換,從而實現動畫的效果。建立資料夾textures private var anim object 動畫陣列 private var nowfram int 幀序列 private var mframe...

unity繪製管道 Unity 之渲染管線初探

unity 是一款跨平台的 3d 引擎,有著強大的渲染功能,並主要用於遊戲開發。談到 unity 的渲染功能,我們不得不提及到著色器 shader 3d 遊戲引擎中最重要的乙個因素 它在遊戲效果以及畫面顯示方面起到了決定性的作用。shader 程式設計也屬於計算機圖形學中乙個重要的部分。接下來讓我們...

unity 調色盤之shader繪製

最近閒來無事,給自己找點麻煩,用shader做乙個調色盤,分享給大家 繪製 中心思想是通過uv座標,計算出每個象素的顏色值 左側方志顏色計算公式 i.uv.y color.r i.uv.y 1 i.uv.x 1 color.r i.uv.y color.g i.uv.y 1 i.uv.x 1 col...