2012-08-19 84 views
-3

我想學習OpenGL,並已諮詢了幾個「指南」和「教程」。這些「指南」和「教程」說,「做這個,這個和這個,然後你有繪製命令」。不那麼好想過OpenGL學習材料

我正在尋找一些OpenGL的學習材料,它實際上解釋了引擎是如何工作的,而不是在這裏給我無意識的東西 - 你是做什麼的。我已經諮詢過像www.glprogramming.com/red/這樣的東西,並且一直都不高興。到目前爲止,在第一章中,我不知道配置選項如何工作,opengl有什麼樣的「上下文結構」,實際上有什麼擴展,最重要的是,在讀完所有內容後,這完全沒有意義:The GL pipeline that nobody can explain

I也瀏覽過,看過「framebuffer」和「renderbuffer」以及「OpenGL context」。我仍然不知道這些是什麼(我認爲在閱讀這些東西之前我至少知道幀緩衝是什麼)。有衝突的解釋是,幀緩衝區保存所有基元的數據,並且幀緩衝區被綁定(??)到一個渲染緩衝區,它執行某些操作?無論如何,所有這些「指南」都會在第1章中詳細說明綁定和緩衝這些詞。在紅皮書的第1章中,我可以看到glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);。我不知道這是做什麼的,因爲這一章沒有告訴我,下一個也沒有。

想象一下,如果我只是向您投擲GObject系統,並說:「好吧,那麼,就把這段代碼放進去,然後定製它並編寫您的應用程序。」這就是我讀過的所有內容。 不可能這樣學習,因爲我不理解幕後發生了什麼。

我想知道:

  • 什麼幀緩衝是
  • 什麼幀緩衝的內部結構是
  • 我如何使用/創建幀緩衝區對象
  • 同樣的事情了「渲染」 ,我懷疑我可能不需要
  • 什麼是GL擴展以及它們如何與引擎交互
  • 如果我想要在屏幕上繪製3D立方體以及這些對象做什麼,我必須創建哪些類型的對象
  • 如何從開始到結束初始化opengl系統,以便設置內存來繪製,跟蹤頂點/基元/紋理/其他元數據,渲染等
  • 流水線從開始到結束的過程,比如說我想渲染一個紅色方塊到內存中的位置
  • 像glVertex3f這樣的調用如何與引擎
  • 所有其他緩衝區如何工作,如「顏色緩衝區」和「頂點緩衝區」
  • 背後的所有理論有點廢話像GL_COLOR_BUFFER_BIT
  • 什麼是深度緩衝區和模板緩衝區,他們如何與繪圖交互?它們是幀緩衝區對象的一部分嗎?

基本上我想在人們向我拋出代碼和奇怪術語之前,實際學習OpenGL背後的理論。我想知道系統是如何工作的,然後我開始無意識地從網上覆制代碼並稱之爲「學習」。出於某種原因,沒有人寫這樣的材料。

任何人都可以在這裏解釋這些事情或指出我在正確的方向(最好是指導,明白我不知道GL)?

+1

http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html – 2012-08-19 01:07:22

+0

到目前爲止,在鏈接上這麼好,比我發現的任何東西都好,但我我仍然對「緩衝區」的術語感到困惑,特別是像「頂點緩衝區」這樣的東西。這件事在什麼地方浮現在內存中,系統如何與多個人一起工作?幀緩衝區和渲染緩衝區之間最大的區別是什麼?非常不錯的鏈接。 – Relish 2012-08-19 01:12:32

+0

這篇維基百科文章解釋了緩衝區:http://en.wikipedia.org/wiki/Data_buffer – 2012-08-19 01:16:33

回答

2

什麼幀緩衝是

排序您在使用OpenGL

什麼幀緩衝的內部結構是畫布提供了層的

類繪製畫布

我如何使用/創建幀緩衝區對象

同樣的事情了「渲染」,我懷疑我可能不需要反正

Renderbuffers是一個幀緩衝帆布

的「層」的一個排序

如何OpenGL的系統從開始初始化的問候完成對設置內存提請,

創建窗口(取決於操作系統)和與之匹配的OpenGL上下文 - 就是這樣。你從不直接用OpenGL觸碰內存。

跟蹤頂點/基元/紋理/其它元數據,渲染等

你已經得到這方面自己創建。

這條管道從開始經過到結束的過程,說如果我想呈現一個紅色的方形

看到像在http://arcsynthesis.org/gltut

教程內存中的位置

你不關心內存位置。

像glVertex3f電話如何與發動機

OpenGL是不是一個引擎進行交互。 OpenGL是一個繪圖庫。 glVertex是立即模式命令,根據狀態,原始(點,線或三角形)被光柵化到目標幀緩衝區。

如何所有其他緩衝區的工作,像「顏色緩衝區」和「頂點緩衝區」

我想你的意思顏色的附件,而那些是一個抽象的名詞。顏色附件可以是渲染緩衝區或紋理圖像。顏色附件是數據目標,而頂點緩衝區是數據源。

後面的所有位垃圾一樣GL_COLOR_BUFFER_BIT

這個「位廢話」的理論是一箇舊的時代計算技術卡列斯位標誌和口罩。用N位變量,如32位整數(在這種情況下N = 32)。這些位中的每一位均可被解釋爲布爾標誌。通過組合多個位掩碼,您可以在一個N位寬的變量中編碼多達N個標誌。

+0

您可以更具體地瞭解幀緩存實際是什麼嗎?它是內存中的位圖還是其他東西?另外,我認爲opengl是一個「狀態引擎」? glVertex如果不知道我們是否正在進行正交或透視渲染,如何進行光柵化? – Relish 2012-08-19 01:49:57

+0

@Relish:framebuffer是一個抽象對象,將內存區域和信息如何使用這些內存作爲可以繪製的內容。但是,您絕對不要直接使用該內存。是的,OpenGL是一個狀態機。 glVertex依賴的狀態是繪圖模式(由glBegin設置,以glEnd結束)以及當前投影和模型視圖矩陣。然而,即時模式已被棄用,所以我不會投入太多時間來學習整個glBegin,glVertex和glEnd業務。 – datenwolf 2012-08-19 10:03:30