歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 通過 Autostereograms 案例學習 OpenGL 和 OpenCL 的互操作性

通過 Autostereograms 案例學習 OpenGL 和 OpenCL 的互操作性

日期:2017/3/1 9:43:26   编辑:Linux編程

引言

在過去的十年裡, GPU (圖形處理單元)已經從特殊硬件(特供)轉變成可以在數值計算領域開辟新篇章的高性能計算機設備。

許多算法可以使用擁有巨大的處理能力的GPU來高速執行和處理大數據量。即使在通常的情況下,不可能將圖形硬件編程化, 圖形硬件也可以加快算法與圖像的處理。 舉個例子:通常情況下可以用來計算圖形差分,模糊圖像, 合並圖像,甚至是進行圖像(或數組)平均值計算。

隨後,可編程方式的出現給編程者帶來了極大的便利。 可編程方式所提供的新的可能性,更廣泛類別的算法可以移植到GPU來執行。需要轉換一定的思路來適應使用屏幕渲染的形式來表達出算法。

現如今可編程GPU支持更高級別的編程范例,可以把它們稱之為GPGPU (通用圖形處理單元). 新模式允許執行更加通用的算法其不涉及到GPU硬件設備相關內容,可不關心圖形化來編制程序了。

本文探討不通過GPGPU的API而是用可擴展可編程渲染管道autostereogram與GPGPU進行交互.(譯注:這個意思是autostereogram為GPGPU的一個框架麼?)autostereogram場景渲染深度緩沖使用GPU的OpenGL和OpenCL (GPGPU) 內核,並且OpenGL GLSL (可編程渲染通道) 著色器的深度數據不必被CPU讀取。

OpenGL 渲染篇 http://www.linuxidc.com/Linux/2011-10/45756.htm

Ubuntu 13.04 安裝 OpenGL http://www.linuxidc.com/Linux/2013-05/84815.htm

OpenGL三維球體數據生成與繪制【附源碼】 http://www.linuxidc.com/Linux/2013-04/83235.htm

Ubuntu下OpenGL編程基礎解析 http://www.linuxidc.com/Linux/2013-03/81675.htm

如何在Ubuntu使用eclipse for c++配置OpenGL http://www.linuxidc.com/Linux/2012-11/74191.htm

《OpenGL超級寶典》學習筆記 http://www.linuxidc.com/Linux/2013-10/91414.htm

案例分析:Autostereogram

本文只提供autostereogram生成算法基礎,將不涉及到更多細節,更具體的信息請參閱其他資料。

Autostereograms的普遍使用將使立體圖像重新流行。Autostereograms可以使單個圖片不聚焦在平面上,以3D場景的形式進行顯示 ,最常用的方式是三維場景的展示。

autostereograms編碼3D場景的能力並不是最好的, 但很快, 觀看隱藏在autostereograms的這些"奧秘" 場景將變的非常容易。

本文所實現的算法是最簡單的autostereogram生成算法之一,該算法簡單地重復某個可平鋪模式(可以是一個可平鋪紋理或者一個隨機生成的紋理),並根據輸入深度圖中像素的z深度來改變其“重復長度”:

對於輸出圖的每一行:
復制該重復紋理的一整行 (該瓦片)
對輸入深度圖中該行的每一個像素:
復制離左邊 one-tile-width 個像素的那個像素的顏色, 然後減去偏移量 X
對於最大深度(離眼睛最遠),X為0,對於最小深度(離眼睛最近),X為最大像素偏移量(~30 像素)

因此,查看器中的像素越是接近,重復模式就越短。這就是誘導眼睛和大腦認為該圖像是三維圖像的基礎。輸出圖的寬度將會是重復圖與輸入深度圖之和,這樣就可以給最初那個未經改變的重復圖的拷貝留出足夠的空間。

當為之後的結果和性能比較呈現一個參考實現時,一個有著確切描述的CPU實現會在稍後被測試,而不是提供一個更加正式的算法描述。

參考:

  • stereograms描述:http://en.wikipedia.org/wiki/Stereogram
  • autostereogram描述:http://en.wikipedia.org/wiki/Autostereogram
  • autostereogram查看技術:http://www.hidden-3d.com/how_to_view_stereogram.php
  • stereograms的非技術性與技術性討論:http://www.techmind.org/stereo/stereo.html

一般實現預覽:

下圖給出了總體的算法流程


更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-06/102844p2.htm

Copyright © Linux教程網 All Rights Reserved