日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opengl的核心模式与立即渲染模式

發(fā)布時(shí)間:2024/1/1 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opengl的核心模式与立即渲染模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

立即渲染模式

早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管線),這個(gè)模式下繪制圖形很方便。
OpenGL的大多數(shù)功能都被庫隱藏起來,開發(fā)者很少有控制OpenGL如何進(jìn)行計(jì)算的自由。而開發(fā)者迫切希望能有更多的靈活性。隨著時(shí)間推移,規(guī)范越來越靈活,開發(fā)者對(duì)繪圖細(xì)節(jié)有了更多的掌控。

核心模式

立即渲染模式確實(shí)容易使用和理解,但是效率太低。因此從OpenGL3.2開始,規(guī)范文檔開始廢棄立即渲染模式,并鼓勵(lì)開發(fā)者在OpenGL的核心模式(Core-profile)下進(jìn)行開發(fā),這個(gè)分支的規(guī)范完全移除了舊的特性。
當(dāng)使用OpenGL的核心模式時(shí),OpenGL迫使我們使用現(xiàn)代的函數(shù)。當(dāng)我們?cè)噲D使用一個(gè)已廢棄的函數(shù)時(shí),OpenGL會(huì)拋出一個(gè)錯(cuò)誤并終止繪圖?,F(xiàn)代函數(shù)的優(yōu)勢(shì)是更高的靈活性和效率,然而也更難于學(xué)習(xí)。立即渲染模式從OpenGL實(shí)際運(yùn)作中抽象掉了很多細(xì)節(jié),因此它在易于學(xué)習(xí)的同時(shí),也很難讓人去把握OpenGL具體是如何運(yùn)作的?,F(xiàn)代函數(shù)要求使用者真正理解OpenGL和圖形編程,它有一些難度,然而提供了更多的靈活性,更高的效率,更重要的是可以更深入的理解圖形編程。

這也是為什么我們的教程面向OpenGL3.3的核心模式。雖然上手更困難,但這份努力是值得的。

最新版本opengl

現(xiàn)今,更高版本的OpenGL已經(jīng)發(fā)布(寫作時(shí)最新版本為4.5),你可能會(huì)問:既然OpenGL 4.5 都出來了,為什么我們還要學(xué)習(xí)OpenGL 3.3?答案很簡(jiǎn)單,所有OpenGL的更高的版本都是在3.3的基礎(chǔ)上,引入了額外的功能,并沒有改動(dòng)核心架構(gòu)。新版本只是引入了一些更有效率或更有用的方式去完成同樣的功能。因此,所有的概念和技術(shù)在現(xiàn)代OpenGL版本里都保持一致。當(dāng)你的經(jīng)驗(yàn)足夠,你可以輕松使用來自更高版本OpenGL的新特性。

opengl的擴(kuò)展

OpenGL的一大特性就是對(duì)擴(kuò)展(Extension)的支持,當(dāng)一個(gè)顯卡公司提出一個(gè)新特性或者渲染上的大優(yōu)化,通常會(huì)以擴(kuò)展的方式在驅(qū)動(dòng)中實(shí)現(xiàn)。如果一個(gè)程序在支持這個(gè)擴(kuò)展的顯卡上運(yùn)行,開發(fā)者可以使用這個(gè)擴(kuò)展提供的一些更先進(jìn)更有效的圖形功能。通過這種方式,開發(fā)者不必等待一個(gè)新的OpenGL規(guī)范面世,就可以使用這些新的渲染特性了,只需要簡(jiǎn)單地檢查一下顯卡是否支持此擴(kuò)展。通常,當(dāng)一個(gè)擴(kuò)展非常流行或者非常有用的時(shí)候,它將最終成為未來的OpenGL規(guī)范的一部分。

opengl狀態(tài)機(jī)

OpenGL自身是一個(gè)巨大的狀態(tài)機(jī)(State Machine):一系列的變量描述OpenGL此刻應(yīng)當(dāng)如何運(yùn)行。OpenGL的狀態(tài)通常被稱為OpenGL上下文(Context)。我們通常使用如下途徑去更改OpenGL狀態(tài):設(shè)置選項(xiàng),操作緩沖。最后,我們使用當(dāng)前OpenGL上下文來渲染。

假設(shè)當(dāng)我們想告訴OpenGL去畫線段而不是三角形的時(shí)候,我們通過改變一些上下文變量來改變OpenGL狀態(tài),從而告訴OpenGL如何去繪圖。一旦我們改變了OpenGL的狀態(tài)為繪制線段,下一個(gè)繪制命令就會(huì)畫出線段而不是三角形。

當(dāng)使用OpenGL的時(shí)候,我們會(huì)遇到一些狀態(tài)設(shè)置函數(shù)(State-changing Function),這類函數(shù)將會(huì)改變上下文。以及狀態(tài)使用函數(shù)(State-using Function),這類函數(shù)會(huì)根據(jù)當(dāng)前OpenGL的狀態(tài)執(zhí)行一些操作。只要你記住OpenGL本質(zhì)上是個(gè)大狀態(tài)機(jī),就能更容易理解它的大部分特性。

opengl對(duì)象

OpenGL庫是用C語言寫的,同時(shí)也支持多種語言的派生,但其內(nèi)核仍是一個(gè)C庫。由于C的一些語言結(jié)構(gòu)不易被翻譯到其它的高級(jí)語言,因此OpenGL開發(fā)的時(shí)候引入了一些抽象層。“對(duì)象(Object)”就是其中一個(gè)。
在OpenGL中一個(gè)對(duì)象是指一些選項(xiàng)的集合,它代表OpenGL狀態(tài)的一個(gè)子集。比如,我們可以用一個(gè)對(duì)象來代表繪圖窗口的設(shè)置,之后我們就可以設(shè)置它的大小、支持的顏色位數(shù)等等??梢园褜?duì)象看做一個(gè)C風(fēng)格的結(jié)構(gòu)體(Struct):

struct object_name {float option1;int option2;char[] name; };

文字參考:https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/
另外推薦教程:https://www.bootwiki.com/opengl/opengl-tutorial1.html

總結(jié)

以上是生活随笔為你收集整理的Opengl的核心模式与立即渲染模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。