導航:首頁 > 凈水問答 > opengl過濾顏色

opengl過濾顏色

發布時間:2025-04-01 13:02:35

Ⅰ OpenGL自學筆記(五)(紋理映射)

紋理映射技術允許在三維物體上應用2D圖像,以增添細節。每個頂點可關聯一個紋理坐標,從而從圖像中選擇采樣顏色並進行片段插值。紋理坐標范圍0-1,左下角起始,不依賴解析度,可為任意浮點值。

為了將紋理映射到物體上,需定義頂點對應的紋理部分,每個頂點關聯紋理坐標,用於指定從紋理圖像的哪個位置采樣顏色,進行片段差值。紋理坐標是模型頂點的數組,OpenGL以此頂點紋理坐標數據查找圖像上的像素進行采樣。

紋理坐標用於指示從紋理圖像的特定部分采樣顏色,用於頂點著色器中的片段著色器。通過紋理坐標獲取顏色稱為采樣,且紋理坐標不依賴於解析度,可以是任意浮點數。

創建紋理對象通常使用glGenTextures函數,綁定至目標(如GL_TEXTURE_2D),並設置環繞方式和過濾方式,管理采樣方式。環繞方式默認為四方連續平鋪,用於紋理超出范圍時的采樣。過濾方式包括鄰近過濾和線性過濾,分別處理紋理放大或縮小時的像素格問題。

多級漸遠紋理(MipMap)用於減少內存浪費,為遠距離小物體提供不同解析度的紋理圖像。使用MipMap技術在不同的距離上使用不同解析度的紋理,減少放大或縮小紋理時的視覺問題。紋理過濾方式包括GL_NEAREST_MIPMAP_NEAREST到GL_LINEAR_MIPMAP_LINEAR,分別對應不同情況下的采樣方法。

載入紋理圖像通常使用如stb_image.h庫,它能夠載入多種流行格式的圖像。首先添加庫至工程,並定義STB_IMAGE_IMPLEMENTATION預處理器宏,使其包含庫的函數定義源碼。通過stbi_load函數載入圖像,然後使用glTexImage2D生成紋理,載入基本級別的紋理圖像。若需使用多級漸遠紋理,可手動設置所有不同的圖像或使用glGenerateMipmap自動生成。

應用紋理的基本流程涉及創建紋理對象、載入圖像、生成紋理,綁定紋理對象至著色器中的采樣器。頂點著色器接收頂點數據,包括紋理坐標,片段著色器接收紋理坐標和采樣器,使用GLSL的texture函數采樣紋理顏色。渲染矩形時,自動綁定紋理至片段著色器采樣器,調用繪制函數顯示紋理效果。

多個紋理的渲染通過多個紋理單元實現。每個紋理單元有位置值,可通過glUniform1i分配給采樣器。激活紋理單元後,綁定紋理至指定單元,允許在片段著色器中使用多個紋理。輸出可以對多個紋理進行混合,使用GLSL的mix函數線性插值顏色。最終流程包括創建紋理對象、載入圖片、生成紋理,綁定多個紋理至紋理單元,定義采樣器位置,渲染時自動使用紋理進行顯示。

在某些情況下,可能會遇到渲染窗口中的報錯,這通常與輸入法設置有關,切換輸入法或檢查環境配置即可解決。對於紋理上下顛倒的問題,可通過在載入時反轉y軸坐標來調整圖像方向,確保紋理正確顯示。

Ⅱ OpenGL-Texture Filtering(紋理過濾)

周一到周五,每天一篇,北京時間早上7點准時更新~跟著我們一起一天天進步和成長吧

在處理紋理貼圖時,紋理上的像素與屏幕上的像素通常不會有直接的一一對應關系。為了使紋理貼圖效果與屏幕顯示匹配,需要通過紋理坐標進行采樣。然而,由於紋理圖像在應用到幾何表面時,總是會被拉伸或縮小,這導致紋理坐標可能無法精確對應到像素上。特別是3D物體帶有方向信息時,紋理可能在不同維度上被拉伸和縮小。這就引入了紋理過濾的概念,即如何在拉伸或縮小紋理時計算顏色片段。

為了實現非整數紋理坐標到像素的顏色采樣,我們使用了`texture()`函數,它接收浮點數紋理坐標。該函數將坐標范圍從0.0到1.0映射到紋理上,不過,不是所有0.0到1.0之間的值都能直接對應到一個紋理像素,某些坐標可能落在像素之間。此外,紋理坐標可以超出0.0到1.0的范圍。接下來的章節將詳細介紹OpenGL如何通過這些浮點數坐標采樣紋理圖片,生成像素值。

紋理過濾是計算拉伸或縮小紋理上的顏色片段的過程。拉伸紋理稱為放大,而縮小紋理稱為縮小。通過設置采樣器參數,OpenGL允許我們為放大和縮小條件設置值的構造方法,這些條件稱為濾鏡。放大濾鏡的參數名為`GL_TEXTURE_MAG_FILTER`,縮小濾鏡的參數名為`GL_TEXTURE_MIN_FILTER`。當前可選擇的基本濾鏡有兩個:`GL_NEAREST`和`GL_LINEAR`,分別對應最近鄰過濾和線性過濾。確保為`GL_TEXTURE_MIN_FILTER`選擇這兩種濾鏡之一,因為默認濾鏡設置在沒有mipmap時無效。

最近鄰過濾是最簡單、最快的過濾方法,其特點是將紋理坐標直接映射到紋理像素上,並使用落點的像素顏色作為片段顏色。在信號處理中稱為點采樣。然而,當紋理被拉伸時,這種過濾方式會產生較大的像素塊,如圖5.7左側示例所示。你可以通過以下函數設置放大和縮小濾鏡:

線性過濾需要更多的計算,但通常值得額外的開銷。現代硬體上,線性過濾的成本接近於零。線性過濾通過應用紋理坐標周圍紋理像素的加權平均值(線性插值)來進行,而不是取最近的紋理像素。要使采樣出來的顏色與紋理顏色完全匹配,紋理坐標需要正好位於紋理像素的中心。線性過濾在紋理被拉伸時會產生模糊的圖形,但這種模糊往往能帶來更真實、更自然的外觀,而不是最近鄰過濾方式產生的尖銳塊狀效果。如圖5.7右側示例所示,你可以通過以下代碼設置線性過濾:

通過比較圖5.7的左右兩幅圖片,我們可以看到應用最近鄰過濾後,圖像呈現出明顯的塊狀和鋸齒效應,尤其是在對比度高的區域。相比之下,使用線性過濾的圖像則更加平滑(盡管可能略顯模糊)。

總結,我們的課程中使用`texture`系列函數,考慮到某些舊版本和OpenGL ES 2.0不支持整型數據,整型的`texelFetch`函數不具備通用性。然而,隨著硬體的發展,未來可能支持整型數據的版本,這句「假命題」可能會發生變化。誰知道呢?

今天的翻譯就到這里,明天再見,拜拜~

想要第一時間獲取最新內容,可以關注東漢書院和圖形之心公眾號

期待在東漢書院與你相遇,一起學習進步!

閱讀全文

與opengl過濾顏色相關的資料

熱點內容
長城老h3的空調濾芯在什麼位置 瀏覽:733
飲水機熱水器進水慢怎麼回事 瀏覽:767
伊罕魚缸過濾器安裝圖 瀏覽:888
三元電池廢水 瀏覽:3
油漆桶回用算固體廢物么 瀏覽:46
怎麼可以更換空氣凈化器濾芯 瀏覽:57
凈化器水不循環怎麼辦 瀏覽:219
凈可家家用空氣凈化器多少錢 瀏覽:288
電壺裡面的水垢如何清理掉 瀏覽:779
樹脂高溫下會變成什麼 瀏覽:833
水垢電解防治器cad圖紙 瀏覽:959
凈水器賣不了貨怎麼辦 瀏覽:548
澱粉廢水 瀏覽:484
大揚程的污水泵都有哪些 瀏覽:136
工業廢水中氨氮含量 瀏覽:772
污水泵上的浮球怎麼用 瀏覽:842
保溫壺去除水垢的方法 瀏覽:237
北京超濾膜處理企業網站 瀏覽:39
硫氰酸銨廢水氧化分子式 瀏覽:665
除垢花灑有用嗎 瀏覽:632