真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

OpenGL ES 名詞解釋(一)

目錄

創(chuàng)新互聯(lián)從2013年成立,先為湯旺等服務(wù)建站,湯旺等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為湯旺企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

  • 一.前言
  • 二.OpenGL ES 上下文
  • 三.OpenGL ES 狀態(tài)機(jī)
  • 四.緩存
  • 五.渲染
  • 六.紋理
  • 七.光柵化 Rasterization
  • 八.片元著色器
  • 九.頂點(diǎn)著色器
  • 十.著?語(yǔ)言 GLSL
  • 十一.著色器使用流程
  • 十二.著色器的渲染流程
  • 十三.猜你喜歡

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES 基礎(chǔ)

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES 特效

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES 轉(zhuǎn)場(chǎng)

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES 函數(shù)

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES GPUImage 使用

零基礎(chǔ) OpenGL ES 學(xué)習(xí)路線(xiàn)推薦 : OpenGL ES 學(xué)習(xí)目錄 >> OpenGL ES GLSL 編程

一.前言

OpenGL(Open Graphics Library)是 Khronos Group (一個(gè)圖形軟硬件行業(yè)協(xié)會(huì),該協(xié)會(huì)主要關(guān)注圖形和多媒體方面的開(kāi)放標(biāo)準(zhǔn))開(kāi)發(fā)維護(hù)的一個(gè)規(guī)范,它是硬件無(wú)關(guān)的。它主要為我們定義了用來(lái)操作圖形和圖片的一系列函數(shù)的 API,OpenGL 本身并非 API。

OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 的子集,針對(duì)手機(jī)、PDA 和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。該規(guī)范也是由 Khronos Group 開(kāi)發(fā)維護(hù)。

OpenGL ES 去除了四邊形(GL_QUADS)、多邊形(GL_POLYGONS)等復(fù)雜圖元,以及許多非絕對(duì)必要的特性,剩下最核心有用的部分。可以理解成是一個(gè)在移動(dòng)平臺(tái)上能夠支持 OpenGL 最基本功能的精簡(jiǎn)規(guī)范。

二.OpenGL ES 上下文

OpenGL ES 是一個(gè)狀態(tài)機(jī),相關(guān)的配置信息會(huì)被保存在一個(gè)上下文(Context)中,這個(gè)些值會(huì)被一直保存,直到被修改。但我們可以配置多個(gè)上下文,通過(guò)調(diào)用setCurrentContext 來(lái)切換

[EAGLContext setCurrentContext:context]

三.OpenGL ES 狀態(tài)機(jī)

首先簡(jiǎn)單了解一下什么是”狀態(tài)機(jī)”,比如我們使用的電腦,接受各種輸入(鼠標(biāo),鍵盤(pán),攝像頭等),然后改變自己當(dāng)前的狀態(tài),但卻并不知道狀態(tài)的改變是如何實(shí)現(xiàn)的。OpenGL 類(lèi)似,接受各種參數(shù),然后參數(shù)的改變引起當(dāng)前狀態(tài)的改變,達(dá)到一種新的狀態(tài)(如:顏色改變,紋理變化,光照強(qiáng)弱變化)。

OpenGL 狀態(tài)機(jī)表示一組狀態(tài)變量的集合。OpenGL 使用狀態(tài)機(jī)來(lái)保存所有的狀態(tài)變量。當(dāng)一個(gè)狀態(tài)變量被修改后,它會(huì)一直保持這個(gè)狀態(tài),直到再次修改它的狀態(tài)。

可以使用函數(shù)很簡(jiǎn)單的對(duì)某個(gè)狀態(tài)做打開(kāi),關(guān)閉,查詢(xún)操作,以深度測(cè)試為例:

glEnable(GL_DEPTH_TEST); 打開(kāi)深度測(cè)試
glDisable(GL_DEPTH_TEST);關(guān)閉深度測(cè)試
glIsEnabled(GL_DEPTH_TEST);是否打開(kāi)深度測(cè)試

四.緩存

OpenGL ES 部分運(yùn)行在 CPU 上,部分運(yùn)行在 GPU 上,為了協(xié)調(diào)這兩部分的數(shù)據(jù)交換,定義了緩存(Buffers)的概念。CPU 和 GPU 都有獨(dú)自控制的內(nèi)存區(qū)域,緩存可以避免數(shù)據(jù)在這兩塊內(nèi)存區(qū)域之間進(jìn)行復(fù)制,提高效率。緩存實(shí)際上就是指一塊連續(xù)的 RAM

五.渲染

將圖片、視頻、按鈕等繪制到屏幕上的過(guò)程叫渲染

六.紋理

紋理可以理解為圖片. 大家在渲染圖形時(shí)需要在其編碼填充圖片,為了使得 場(chǎng)景更加逼真.?這里使用的圖片,就是常說(shuō)的紋理.但是在 OpenGL ,我們更加 習(xí)慣叫紋理,?不是圖片.

紋理是一個(gè)用來(lái)保存圖像顏色的元素值的緩存,渲染是指將數(shù)據(jù)生成圖像的過(guò)程。紋理渲染則是將保存在內(nèi)存中的顏色值等數(shù)據(jù),生成圖像的過(guò)程

//獲取紋理的最大size
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);

//獲取glsl支持最多的紋理數(shù)量 《= 8 超過(guò)8個(gè)紋理之后,第9個(gè)無(wú)法顯示
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,&maxCombinedTextureUnits);

七.光柵化 Rasterization

光柵化 Rasterization 就是把物體的數(shù)學(xué)描述以及與物體相關(guān)的顏?信息轉(zhuǎn)換為屏幕上?于對(duì)應(yīng)位置的像素及?于填充像素的顏?。

光柵化簡(jiǎn)單一句話(huà)就是:將圖像的位置和顏色信息轉(zhuǎn)換成在屏幕上顯示的位置和顏色的數(shù)據(jù)的過(guò)程。光柵化是 OpenGL 自動(dòng)完成的,開(kāi)發(fā)者無(wú)法影響。

八.片元著色器

1.?般?來(lái)處理圖形中每個(gè)像素點(diǎn)顏色計(jì)算和填充;

2.?段著?器是 OpenGL 中?于計(jì)算?段(像素)顏色的程序。?段著色器是 逐像素運(yùn)算的程序,也就是說(shuō)每個(gè)像素都會(huì)執(zhí)行?次?段著?器,當(dāng)然也 是并行的。

通過(guò)光柵化產(chǎn)生的片元,需要通過(guò)片元著色器確定最終顯示在屏幕上的每個(gè)像素點(diǎn)的顏色值和深度值。通常來(lái)說(shuō),片元的個(gè)數(shù)是遠(yuǎn)大于頂點(diǎn)的個(gè)數(shù),所以它也是并行計(jì)算的。

頂點(diǎn)著色器決定一個(gè)圖元應(yīng)該位于屏幕的什么位置,而片元著色器決定某個(gè)片元的顏色應(yīng)該是什么

OpenGL ES 2.0 版本片元著色器

//片元著色器
precision mediump float;                           // 設(shè)置工作精度

varying vec2 vTextureCoord;                        // 接收從頂點(diǎn)著色器過(guò)來(lái)的紋理坐標(biāo)
uniform sampler2D sTexture;                        // 紋理采樣器,代表一幅紋理
void main()
{
    gl_FragColor = texture2D(sTexture, vTextureCoord);// 進(jìn)行紋理采樣
}

OpenGL ES 3.0 版本片元著色器

//片元著色器
#version es 300
precision mediump float;

in vec3 v_color; // input form vertex shader
layout(location = 0) out vec4 o_fragColor;

void main() {
    o_fragColor = vec4(v_color, 1.0);
}

關(guān)于 OpenGL ES 2.0 和 3.0 頂點(diǎn)著色器和片元著色器區(qū)別請(qǐng)參考:《OpenGL ES 2.0 和 3.0 區(qū)別》

九.頂點(diǎn)著色器

1.?般用來(lái)處理圖形每個(gè)頂點(diǎn)變換(旋轉(zhuǎn)/平移/投影等)頂點(diǎn)著?器是 OpenGL 中?于計(jì)算頂點(diǎn)屬性的程序。

2.頂點(diǎn)著?器是逐頂點(diǎn)運(yùn) 算的程序,也就是說(shuō)每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)行一次頂點(diǎn)著?器,當(dāng)然這是并?的,并且頂點(diǎn)著?器運(yùn)算過(guò)程中?法訪(fǎng)問(wèn)其他頂點(diǎn)的數(shù)據(jù)

3.一般來(lái)說(shuō)典型的需要計(jì)算的頂點(diǎn)屬性主要包括頂點(diǎn)坐標(biāo)變換、逐頂點(diǎn)光照 運(yùn)算等等。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換到歸一化坐標(biāo)系的運(yùn)算,就是在這?發(fā)生的。

頂點(diǎn)著色器處理從客戶(hù)端輸入的數(shù)據(jù),應(yīng)用變換(平移,旋轉(zhuǎn),縮放等),或者進(jìn)行其他類(lèi)型的數(shù)學(xué)運(yùn)算來(lái)計(jì)算光照效果,位移,顏色值等。因此,頂點(diǎn)著色器可能很簡(jiǎn)單也可能很復(fù)雜(比如最簡(jiǎn)單的值傳遞)。

對(duì)于繪制命令傳輸?shù)拿總€(gè)頂點(diǎn),OpenGL 都會(huì)調(diào)用頂點(diǎn)著色器來(lái)處理頂點(diǎn)相關(guān)的數(shù)據(jù)。不用擔(dān)心存在大量頂點(diǎn)的效率問(wèn)題,它是并行計(jì)算的。頂點(diǎn)著色器的輸出是片元著色器的輸入。

頂點(diǎn)著色器決定一個(gè)圖元應(yīng)該位于屏幕的什么位置,而片元著色器決定某個(gè)片元的顏色應(yīng)該是什么

OpenGL ES 2.0 版本頂點(diǎn)著色器

//頂點(diǎn)著色器
attribute vec4 aPosition;                            // 應(yīng)用程序傳入頂點(diǎn)著色器的頂點(diǎn)位置
attribute vec2 aTextureCoord;                        // 應(yīng)用程序傳入頂點(diǎn)著色器的頂點(diǎn)紋理坐標(biāo)

varying vec2 vTextureCoord;                          // 用于傳遞給片元著色器的頂點(diǎn)紋理數(shù)據(jù)
void main()
{
    gl_Position = aPosition;                         // 此次繪制此頂點(diǎn)位置
    vTextureCoord = aTextureCoord;                   // 將接收的紋理坐標(biāo)傳遞給片元著色器
}

OpenGL ES 3.0 版本頂點(diǎn)著色器

//頂點(diǎn)著色器
#version es 300

uniform mat4 u_matViewProj;
layout(location = 0) in vec4 a_position;
layout(location = 1) in vec3 a_color;
out vec3 v_color;

void main() {
    gl_Position = u_matViewProj * a_position;
    v_color = a_color;
}

關(guān)于 OpenGL ES 2.0 和 3.0 頂點(diǎn)著色器和片元著色器區(qū)別請(qǐng)參考:《OpenGL ES 2.0 和 3.0 區(qū)別》

十.著?語(yǔ)言 GLSL

OpenGL 著?語(yǔ)言(OpenGL Shading Language)是?來(lái)在 OpenGL 中著色編程 的語(yǔ)言,也即開(kāi)發(fā)人員寫(xiě)的短小的?定義程序,他們是在圖形卡的 GPU (Graphic Processor Unit 圖形處理單元)上執(zhí)行的,代替了固定的渲染管 線(xiàn)的一部分,使渲染管線(xiàn)中不同層次具有可編程性。?如:視圖轉(zhuǎn)換、投 影轉(zhuǎn)換等。

GLSL(GL Shading Language)的著?器代碼分成 2 個(gè)部分:

  1. Vertex Shader 頂點(diǎn)著?器
  2. Fragment 片元著器

關(guān)于 OpenGL ES 2.0 和 3.0 頂點(diǎn)著色器和片元著色器區(qū)別請(qǐng)參考:《OpenGL ES 2.0 和 3.0 區(qū)別》

十一.著色器使用流程

整個(gè)著色器的使用流程如下:

1,創(chuàng)建著色器對(duì)象 glCreateShader

2,把源碼關(guān)聯(lián)到每個(gè)著色器對(duì)象 glShaderSource

3,編譯著色器 4,創(chuàng)建程序 glCompileShader

5,關(guān)聯(lián)著色器到程序?qū)ο?glAttachShader

6,鏈接程序 glCreateProgram

7,激活和關(guān)閉著色器程序 glUseProgram

8,刪除著色器和程序 glDeleteProgram

具體可參考:《OpenGL ES GLSL 著色器使用過(guò)程》

十二.著色器的渲染流程

篇幅有限,更多請(qǐng)參考:《OpenGL ES 名詞解釋(二)》中含有關(guān)于坐標(biāo)系,投影等等的講解

十三.猜你喜歡

  1. OpenGL ES 簡(jiǎn)介
  2. OpenGL ES 版本介紹
  3. OpenGL ES 2.0 和 3.0 區(qū)別
  4. OpenGL ES 名詞解釋(一)
  5. OpenGL ES 名詞解釋(二)

本文由博客 - 猿說(shuō)編程 猿說(shuō)編程 發(fā)布!


分享名稱(chēng):OpenGL ES 名詞解釋(一)
網(wǎng)站鏈接:http://weahome.cn/article/dsoiecj.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部