opengl教程翻譯 1建立乙個視窗

2022-09-09 02:30:11 字數 2191 閱讀 2683

opengl規範沒有為建立和操作視窗指定任何的api。目前流行的支援opengl的視窗系統,一般包含支援其的子

系統,提供opengl上下文和視窗系統之間的繫結。在x視窗系統中,這樣的介面被稱為glx。微軟為視窗提供

wgl,macos則有cgl。用這些介面無誤地建立乙個顯示圖形的視窗通常是一項繁瑣的工作,這就是為什麼我們

需要乙個高水平的庫來把這些細節抽象出來。我們把這個庫叫做「opengl程式集庫」,簡稱glut。它提供了一

個簡易的api,對視窗管理以及事件處理、io控制和一些其他服務。另外,glut是跨平台的,移植更容易。代

替glut的備選方案包含sdl和glfw。

glutinit(&argc, ar**);

這句用來初始化glut。引數可以從命令列傳入,包括一些有用的選項例如"-sync"和"-gldebug",可以禁用x

視窗的非同步特徵,以及分別自動的檢測和顯示gl錯誤。

glutinitdisplaymode(glut_double | glut_rgba);

這裡我們配置一些glut的選項。glut_double 意味著能夠雙快取(一面在後台快取繪製,另一名快取負責顯

示),和顏色快取(大多數渲染結束的地方,例如螢幕)。我們通常希望用到這2個及其他選項。

glutinitwindowsize(1024, 768);

glutinitwindowposition(100, 100);

glutcreatewindow("tutorial 01");

這些呼叫指定引數並建立視窗。你也可以指定視窗標題。

glutdisplayfunc(renderscenecb);

由於我們工作環境在視窗系統,大部分與執行程式的互動都通過事件**函式。glut針對與底層視窗系統的交

互,提供給我們若干**選項。在這裡我們僅僅用乙個「主」**在一幀中渲染。這個函式會在glut內部迴圈

被不斷地呼叫。

glclearcolor(0.0f, 0.0f, 0.0f, 0.0f);

這是我們第一次在opengl中遇到狀態的概念。在狀態背後的思想是,渲染是一項極其複雜的任務,以至於不能

像調乙個函式那樣接受了幾個引數的方式來對待它(而且乙個設計良好的函式不應該接受過多的引數)。你需

要制定著色器、快取以及多種標記來影響渲染的進行。另外,你經常希望在一連貫的渲染中保持相同的引數不

變(例如,如果你不想禁調深度測試的話,就不需要在每次渲染呼叫時都指定禁用引數)。這就是為什麼,大

部分渲染操作的引數都通過在opengl狀態機中設定標記和值來完成,而且渲染呼叫本身通常限制在幾個引數,

這些引數用來制定需要繪製的頂點數和它們的偏移量。再呼叫了乙個改變狀態的函式後,特定的引數依然完整

的存留著,直到下次用不同的值呼叫相同函式。上面那個呼叫就是這樣設定顏色的,當需要清理幀快取的時候

(幀快取後面再分析)。顏色有4條通道(rgba),被指定成0.0到1.0之間的某個標準值。

glutmainloop();

這個呼叫告訴glut,由從此刻開始glut內部迴圈。在此迴圈中,它監聽來自視窗系統的事件,然後把它們傳

遞給我們配置好的**函式。在這個例子中,glut只會呼叫我們註冊的函式,作為顯示**的renderscenecb

,以便我們能渲染幀。

glclear(gl_color_buffer_bit);

glutswapbuffers();

在我們的渲染函式中,我們唯一做的事情就是清除幀快取(用上面的顏色指令,改變它試試)。第二個呼叫告

訴glut,前快取和後快取對調。於是,在下一回合,再經過渲染**時,會在當前的前快取中渲染幀,而當前

的後快取則用作顯示。

譯者總結:

1.opengl沒有為各個平台提供視窗建立和顯示api,而需要每個平台各自提供api並與opengl繫結。微軟提供wgl,蘋果提供cgl,而glut是把以上

集合起來的乙個跨平台的程式庫,使開發者能方便的、間接的呼叫wgl或cgl。

2.opengl是乙個狀態機,可以想象成它是乙個不斷在牆上刷油漆的機械人,你要做的只是在某些時刻設定它用什麼顏色、以怎樣的軌跡刷牆,

glclearcolor、glclear就是這樣的命令。

3.你可以在一開始就設定好渲染指令,也可以在程式執行過程中不斷設定指令,實現後者的方式是提供乙個**函式給glutdisplayfunc,並通

過glutmainloop不斷監聽視窗事件呼叫這個**函式,從而實現實時設定指令。

opengl 教程 1 建立視窗

本章教程內容主要來自 opengl做為3d圖形介面,本身並不提供任何視窗管理功能,在不同作業系統中,通常都有相關庫做為opengl和os的介面,來實現視窗管理,比如xwindows系統中的glx,windows系統中的wgl,mac os中的cgl等等。在下面的一系列教程中,我們使用glut,這是乙...

OpenGL建立乙個幀緩衝

1.定義幀緩衝變數名 unsigned int gbuffer 2.建立幀緩衝 glgenframebuffers 1,gbuffer 3.將幀緩衝繫結到gl framebuffer glbindframebuffer gl framebuffer,gbuffer 4.將gposition紋理變數儲...

推薦乙個opengl系統學習的教程

由於opengl的版本特別多,而且opengl 1.x和opengl2.x及以後的版本差別有特別大,剛開始自學的時候難免會走一些誤區,發現學的並不是自己所用的。前者是固定管線,渲染流程的相關概念都比較老,對渲染的流程做了 封裝 於此帶來的好處是簡單,容易上手,不好的地方也是顯而易見,想要修改渲染流程...