OpenGL ES與OpenGL 的區別

2021-08-31 10:46:10 字數 2964 閱讀 6491

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

opengl es 概述

本文對 opengl es 做了綜合性的介紹,包括 opengl es 的由來、主要版本及其特點、opengl es 與 opengl 的主要區別等等。

簡介

2

opengl_es是khronos協會從opengl裁剪定製而來的,專為手機,遊戲機等嵌入式裝置而設計。它的介面其實和 open gl很類似。

opengl_es有幾個主要版本,但對遊戲開發來說,需要關注的只有兩個: opengl_es_1.x_和 opengl_es_2.x。

兩者的特性和主要區別如下:

opengl_es_1.x 為固定渲染管線(fixed_function)而設計。子版本包括:1.0,1.1。1.0從opengl_1.3裁減而來;1.1從opengl_1.5裁減而來。1.1向下相容1.0。經研究,1.1因為更先進,而且相比1.0增加的特性也都很有用,所以基本上不用考慮1.0了。1.1和1.0的變化不算很大,應該晶元的**也不會高出很多?1.1的技術規範參見:es_full_spec.1.1.12.pdf 或者 es_cm_spec_1.1.12.pdf。

opengl_es_2.x 為可程式設計渲染管線(programmable)而設計。目前只有2.0這乙個子版本,從opengl_2.0裁減而來。和1.x的區別是可以支援vertex和pixel shader,因此能夠實現更多的特效。另外2.0就不再支援1.x裡面的固定管線功能了,也就是說2.x並不向下相容1.x。技術規範參見:es_full_spec_2.0.22.pdf 或者:es_cm_spec_2.0.22.pdf。

opengl es相對opengl刪減了一切低效能的操作方式,有高效能的決不留低效能的,即只求效能不求相容性。比如

沒有double型資料型別,但加入了高效能的定點小數資料型別;

沒有glbegin/glend/glvertex,只能用gldrawarrays/gldraw......;

沒有實時將非壓縮資料轉成壓縮貼圖的功能,程式必須直接提供壓縮好的貼圖;

opengl es 與 opengl 的區別

3

資料型別:

1.    i glint 整數型

2.    f glfixed 定點小數

3.    x glclampx 限定型定點小數

刪除的功能:

1.    glbegin/glend

2.    glarrayelement

3.    顯示列表

4.    求值器

5.    索引色模式

6.    自定義裁剪平面

7.    glrect

8.    影象處理(這個一般顯示卡也沒有,firegl/quadro顯示卡有)

9.    反饋緩衝

10.選擇緩衝

11.累積緩衝

12.邊界標誌

13.glpolygonmode

14.gl_quads,gl_quad_strip,gl_polygon

15.glpushattrib,glpopattrib,glpushclientattrib,glpopclientattrib

16.texture_1d、texture_3d、texture_rect、texture_cube_map

17.gl_combine

18.自動紋理座標生成

19.紋理邊界

20.gl_clamp、gl_clamp_to_border

21.消失紋理代表

22.紋理lod限定

23.紋理偏好限定

24.紋理自動壓縮、解壓縮

25.gldrawpixels,glpixeltransfer,glpixelzoom

26.glreadbuffer,gldrawbuffer,glcopypixels

其它注意事項:

1.    gldrawarrays等函式中資料必須緊密排列,即間隔為0

2.    各種資料的堆疊深度較低

opengl based graphics : a state machine

4it's a state machine - setup the stage, lighting, actors... then draw it.

sample opengl es 2.0 program as following:

// setup

handle = get_platform_specific_window_handle();

eglgetdisplay(handle);

eglinitialize();

eglbindapi(egl_opengl_es_api);

eglchooseconfig();

eglcreatewindowsu***ce();

eglcreatecontex();

eglmakecurrent();

//actors

float afvertices = ;

glenablevertexattribarray(0);

glvertexattribpointer(vertex_array,gl_float,gl_false,afvertices);

gldrawarrays(gl_********_strip, 0, 4);

//show

eglswapbuffers(egldisplay,eglsu***ce);

給我老師的人工智慧教程打call!

關於OpenGL ES版本

1.opengl es 各版本 opengl es 1.x 針對固定管線硬體 opengl es 2.x 針對可程式設計管線硬體 opengl es 1.0 以 opengl 1.3 規範為基礎 opengl es 1.1 以 opengl 1.5 規範為基礎 opengl es 2.0 以 ope...

OpenGl ES 使用流程

opengl es 2.0 graphics pipeline 渲染管線流程 vertex arrays buffer object 頂點資料 vertex shader 頂點shader primitive assembly 圖元裝配 rasterization 光柵化 fragment shad...

OpenGL ES渲染管線

渲染管線 graphics pipeline 在 opengl es 1.0 版本中,支援固定管線,而 opengl es 2.0 版本不再支援固定管線,只支援可程式設計管線。什麼是管線?什麼又是固定管線和可程式設計管線?管線 pipeline 也稱渲染管線,因為 opengl es在渲染處理過程中...