2012-07-16 75 views
2

我正在尋找一種方法將像素緩衝區直接渲染到屏幕上。我需要在OSX和Linux上都做到這一點,儘管我知道我可能需要通過不同的方法爲每個操作系統做到這一點(儘管跨平臺庫會很好。)你從哪裏開始?OpenGL像素緩衝區直接在Linux和Mac OSX屏幕上

回答

5

您可以隨時使用四邊形的正投影到您的後緩衝器/表面。

或者只是在NDC空間(-1到+1)發送四元組而不需要任何矩陣乘法。

更新,因爲這顯然是不夠清晰:

對於「全屏四」的方式,發送兩個三或四一個像這樣的:

enter image description here

配置/訂單的verts取決於你的繞線順序和原始模式。 Z的值應該在-11之間。您可以選擇-1。投影和模型視圖矩陣應該是一個單位矩陣(這是所有零,則1米的主對角線)

enter image description here

在你不需要做任何的矩陣乘法,所以你不實際需要任何矩陣OPS換句話說在着色器中,因爲座標已經在Normalized Device Coordinates(NDC)中。

即,它的enter image description here

這裏,目標設備內間隔是alread一些代碼:

glMatrixMode (GL_MODELVIEW); 
glPushMatrix(); 
    glLoadIdentity(); 
    glMatrixMode (GL_PROJECTION); 
    glPushMatrix(); 
     glLoadIdentity(); 
     glBegin (GL_QUADS); 
     glVertex3i (-1, -1, -1); 
     glVertex3i (1, -1, -1); 
     glVertex3i (1, 1, -1); 
     glVertex3i (-1, 1, -1); 
     glEnd(); 
    glPopMatrix(); 
    glMatrixMode (GL_MODELVIEW); 
glPopMatrix(); 

頂點着色器是,不只是一個直接的直通到像素/片段着色器。顯然,你可以將相關的像素/紋理緩衝區設置爲着色器資源/變量,並在像素/片段着色器中對其進行採樣。並且不要忘記將頂點的texcoord UV設置爲相應的紋理值(0-1)。

或者,您也可以使用相應的窗口系統將紋理直接塗抹到窗口表面。這很大程度上取決於您用於窗口管理(例如SDL)的內容,還可能需要某種紋理格式/佈局才能工作(或轉換)。

+0

你怎麼做到的?你有鏈接怎麼做?或者一些代碼? – 2012-07-16 08:00:58

+0

@BЈовић我不配得到downvote。我寫的所有圖形API都是普遍適用的。我寫的東西給了足夠的信息來「開始」 - 互聯網上有無數的例子; OP要求從哪裏開始。我相信給理論而不是爲他們寫一些代碼,但我會通過舉一些例子放縱你。 – 2012-07-16 08:41:46

+0

這正是我需要的,非常感謝你。這是一個非常好的解釋。 – Lethjakman 2012-07-17 16:55:47