VTK 學習 3D基礎知識 紋理

2021-09-24 10:14:55 字數 2003 閱讀 8756

我們了解到,為了向物件新增更多細節,我們可以使用每個頂點的顏色來建立一些有趣的影象。然而,要獲得更多的細節,我們必須有許多頂點,以便我們可以指定很多顏色。這會占用相當多的額外開銷,因為每個模型需要更多頂點,並且每個頂點也需要顏色屬性。

除了影象,紋理還可以用於儲存大量資料以傳送到著色器。

為了將紋理對映到三角形,我們需要告訴三角形的每個頂點它對應於哪個部分紋理。因此每個頂點都應該有乙個紋理座標與它們相關聯,指定要從中取樣的紋理影象的哪個部分。然後片段插值對其他片段進行其餘的處理。

紋理座標範圍從0到1的x和y軸線(記住,我們使用2d紋理影象)。呼叫使用紋理座標檢索紋理顏色取樣。紋理座標從(0,0)紋理影象的(1,1)左下角開始到紋理影象的右上角。下圖顯示了我們如何將紋理座標對映到三角形:

我們為三角形指定3個紋理座標點。我們希望三角形的左下側與紋理的左下側對應,因此我們使用(0,0)三角形左下角頂點的紋理座標。這同樣適用於具有(1,0)紋理座標的右下側。三角形的頂部應與紋理影象的頂部中心對應,因此我們將(0.5,1.0)其作為紋理座標。我們只需要將3個紋理座標傳遞給頂點著色器,然後將其傳遞給片段著色器,片段著色器整齊地插入每個片段的所有紋理座標。

紋理座標通常從範圍(0,0)到(1,1),但如果我們指定此範圍外的座標發生了什麼?opengl的預設行為是重複紋理影象(我們基本上忽略浮點紋理座標的整數部分),但opengl提供了更多選項:

gl_repeat:紋理的預設行為。重複紋理影象。

gl_mirrored_repeat:與gl_repeat相同,但每次重複都會映象影象。

gl_clamp_to_edge:夾住0和之間的座標1。結果是更高的座標被夾緊到邊緣,導致拉伸的邊緣圖案。

gl_clamp_to_border:範圍之外的座標現在被賦予使用者指定的邊框顏色。

當使用預設範圍之外的紋理座標時,每個選項都具有不同的視覺輸出。讓我們看一下樣本紋理影象上的樣子:

紋理座標不依賴於解析度,但可以是任何浮點值,因此opengl必須找出哪個紋理畫素(也稱為 紋理元素)將紋理座標對映到。如果我們有乙個非常大的物件和乙個低解析度紋理,這一點變得尤為重要。opengl有這個選項紋理過濾同樣。有幾種選擇,但現在我們將討論最重要的選項:gl_nearest和gl_linear。

gl_nearest(也稱為最近鄰過濾)是opengl的預設紋理過濾方法。設定為gl_nearest時,opengl選擇中心最接近紋理座標的畫素。下面您可以看到4個畫素,其中十字表示精確的紋理座標。左上角紋理元素的中心最接近紋理座標,因此被選為取樣顏色:

gl_linear(也稱為(bi)線性濾波)從紋理座標的相鄰紋素中獲取插值,近似紋理畫素之間的顏色。從紋理座標到紋理元素中心的距離越小,紋素的顏色對取樣顏色的貢獻就越大。下面我們可以看到返回相鄰畫素的混合顏色:

但是這種紋理過濾方法的視覺效果是什麼?讓我們看看在大物件上使用低解析度的紋理時這些方法是如何工作的(因此紋理向上縮放,單個紋素明顯):

gl_nearest導致阻塞模式,我們可以清楚地看到形成紋理的畫素,而gl_linear產生更平滑的模式,其中單個畫素不太明顯。gl_linear產生更逼真的輸出,但是一些開發人員更喜歡更多的8位外觀,因此選擇gl_nearest選項。

可以設定紋理過濾 放大 和 縮小檔案操作(向上或向下放大時),例如,當紋理向下縮放時,您可以使用最近鄰居過濾,對於放大的紋理,可以使用線性過濾。因此,我們必須為兩個選項指定過濾方法gltexparameter*。

3D列印基礎知識筆記

3d列印原理 3d列印是一種以數字模型為基礎,運用粉末狀金屬或塑料等可粘合材料,通過逐層列印的方式來逐層構造物體的技術。一般以絲槓帶動座標軸移動。3d列印標準模式 stl sterelithography 即立體印刷,此字尾的3d模型檔案是3d列印的標準檔案格式。3d列印模型 3d列印種類 1 fd...

VTK基礎知識整理

最近在做的專案需要用到vtk,把一些基礎知識整理一下記錄下來,方便以後檢視。vtk的工作原理 vtk通過資料流實現變資訊為圖形資料的。要理解工作原理,首先明確幾個型別 1.vtksource 資料來源 這個就好比乙個劇本裡面的角色,讓演員知道要演的是什麼人物。資料來源有 vtkconesource,...

3D數學基礎

vector是向量,向量的意思,向量既有大小,又有方向,verctor3 就是三維向量,乙個三維向量會有三個分量,分別是 x,y,z,在 unity 中每乙個遊戲物件都至少會有乙個元件叫 transform,transform 主要用來控制遊戲物件的位置,旋轉和縮放。vector3.distance...