導航:首頁 > 編程語言 > opengl可編程管線

opengl可編程管線

發布時間:2022-08-09 13:48:29

① 在opengl中怎麼定義超過8個的光源

固定管線最多就8個.
編程管線可以超過8個16個.具體怎麼做看你的設計.因為一般的顯卡都要保證Uniform寄存器最低256個的底線. 所以只要你的設計不超過Uniform總數理論上都是可以的.
如果要的再多,就不得不採用"延遲渲染"技術了. 它的渲染步驟比較復雜.支持無數多光源.你可以去看論文. 但是這種畫法比較費GPU. 在PC上沒問題.但手機上就不行.耗電太大.
比如 古墓麗影9,10 就是典型的後期渲染游戲.你可以玩玩,注意一下它的細節.

② OPENGL是什麼意思

游戲渲染,OpengGL和DirectX都是為了給魔獸世界提供很high的游戲動畫效果,增加游戲運行速度。不同電腦用不同模式帶來的速度有時候是不一樣的,畫面的精美效果也可能不一樣,一般OpenGL的渲染速度要更快。

③ opengl為什麼使用右手坐標系

眾所周知,在固定管線的OpenGL中只能使用右手坐標系,OpenGL並沒有提供API讓你在左右手坐標系中切換。而在可編程管線的OpenGL中,就沒有那麼
多限制了,所有的Vertex Transform都由你來控制。事實上,你直接把左手坐標系的頂點和矩陣傳給OpenGL Shader也是沒有問題的,在Vertex Shader
使用mul(v, matrix)變換頂點,得到的會是跟Direct3D同樣的結果。注意是跟Direct3D同樣的結果,而不是跟固定管線OpenGL相同的結果,事實上,正如
上面所說,左右手坐標系渲染的結果的左右顛倒的。唯一要區別的是Viewport的Z,在OpenGL中,裁剪空間的Z坐標是[-1. 1],而在Direct3D中是[0, 1],
而經過Viewport變化後,不管是OpenGL還是Direct3D, Z都是[0, 1], OpenGL的視口變化是 Z=(Z/W + 1) / 2 ,而Direct3D是Z=(Z/W),這對Depth
Test不受影響,Depth Test只比較相對位置遠近,但Depth Buffer的值就不同了。所以需要對project matrix做一些調整,才能讓他們寫到depth buffer中
的數值相同。具體來說,如果要讓OpenGL流水線接受D3D的project matrix,就需要乘上

相當於把project space的頂點z都作了z = z * 2 – 1的操作,所以經過viewport變換就一致了。

④ opengl是否可以不使用GLSL

一個是固定渲染流水線
GLSL是可編程渲染流水線
根據需求 使用不同的方式

⑤ 可編程渲染管線比固定管線的優勢在哪有什麼應用

固定渲染管線就是只可配置(configurable)的管線,實現不同效果就好像在電路中打開不同的開關,例如texture stage的設置就是最復雜的部分,而stage數量非常有限(Direct3D 9隻有8個),想做各種效果及它們的組合,就像是一個智力游戲般。
可編程渲染管線把很多部分從可配置改為可編程(programmable),各種效果及他們的組合可以通過一般編程的方式實現,自由度高得多,而且不需那麼傷腦筋。最通常的應用就是自行實現光照和材質,可用上各種光照和反射模型,也可把一些運算放在頂點上算,一些運算放在像素上算。
性能差異基本上不用考慮了,新的API甚至乎已淘汰固定渲染管線(如OpenGL 3.0+、Direct3D 10+、OpenGL ES 2+、WebGL),而較新的硬體要支持固定渲染管線應該也都是驅動用可編程管線模擬出來的。
總之,現在基本上不需要學習固定管線了。

android opengles2.0值得學習嗎

OpenGLES是一個讓人崩潰的東西。在Andorid手機上做3D還就得用它。把我記的一些筆記分享在這里吧:

Android OpenGL ES簡介 20011-6-3
Android系統使用OpenGL的標准介面來支持3D圖形功能,android 3D圖形系統也分為java框架和本地代碼兩部分。
本地代碼主要實現的OpenGL介面的庫,在Java框架層,javax.microedition.khronos.opengles是java標準的OpenGL包,
android.opengl包提供了OpenGL系統和Android GUI系統之間的聯系。
Android的本地代碼位於frameworks/base/opengl下,
JNI代碼位於frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp,
java類位於opengl/java/javax/microedition/khronos下
本地測試代碼位於frameworks/base/opengl/tests。包括angeles、fillrate等14個測試代碼,這些代碼都可以通過終端進行本地調用測試(模擬器中使用adb shell)。
OpenGL ES 1.x
固定管線操作,支持glVertexPointer()等函數,不支持GLSL。頭文件在ndk的GLES目錄下,庫文件是libGLESv1_CM.so。
OpenGL ES 2.x
可編程管線操作,不兼容1.x,不支持固定管線操作,例如glVertexPointer()等函數。支持GLSL(還必須用這個來編程)。頭文件在ndk的GLES2目錄下,庫文件是libGLESv2.so。

OpenGL ES學習 2011-6-30
OpenGL定義了自己的數據類型。應該堅持使用這些OpenGL的數據類型,從而保證可移植性和效率。
OpenGL ES 目前不支持64位數據類型。
OpenGL ES 只支持三邊形。
OpenGL ES 只支持gl開頭的函數,glu庫都不支持。
OpenGL ES 從 OpenGL中刪除的功能:
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

OpenGL ES 2.0 2011-10-9
2.0和1.1不兼容。
- 2.0使用的頭文件是ndk的include目錄下的GLES2目錄,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目錄。
- 2.0使用的庫文件是ndk的lib目錄下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。
- 2.0中取消了很多1.1函數,例如glMatrixModel和glLoadIdentity等。
OpenGL著色語言(GLSL――OpenGL Shading Language)
- 使用2.0,必須學此語言。因為很多1.1的函數都被取消了。

san-angeles NDK OpenGL ES 1.1的例子程序 2012-3-8
San Angeles,查維基網路,是一個虛構的未來概念城市,位於南加州。常在電影中出現,來源自Los Angeles和San Diego.
該程序的演示效果是,觀察一個宏偉的城市,地面是鏡面有建築倒影,城市中有飛船飛過。前後有5、6個觀察點,而且鏡頭在每個觀察點不停的移動。
這個例子,用NDK(C++)調用OpenGL ES 1.1來繪制了San Angeles這個城市。基本上全部使用了NDK,Java程序只有1個。
用vc2005演示一下,目的通過跟蹤代碼了解一些細節。方法是:
- 將jni下所有的.h文件,以及demo.c,app-win32.c復制出來,放在一個專門的目錄下,然後改造成用OpenGL的而不是ES的。(或者乾脆刪除大段的繪制代碼,保證編譯通過)
首先分析Java代碼
- DemoActivity.java,這是唯一的Java文件,它主要需要下列4個jni的介面:
- private static native void nativeInit(); // 初始化
- private static native void nativeResize(int w, int h);
- private static native void nativeRender(); // 繪制1幀
- private static native void nativeDone();
其次分析C++代碼 app-android.c
- 首先,調用了importGLInit(),動態導入OpenGL的庫。
- 其次,調用了 appInit(),在內存中建立了平台無關的3D對象集合。建立方法是用一個數組,用類似畫圓拔高的方式產生諸多三角形。
- 然後,在每個時鍾周期中調用appRender(),細節是:
- prepareFrame(width, height); // 准備OpenGL ES繪制框架。其實就是清空顏色和深度緩沖,重置投影和模型矩陣。
- camTrack(); // 算好在當前時鍾周期,鏡頭的位置、朝向及焦距等。然後調用gluLookAt來實現。
- configureLightAndMaterial(); // 設置光源和材質
- drawModels(-1); // 先繪制倒影(其實就是將所有模型z軸倒過來畫)
- 第一個循環,是畫精緻的物體
- 第二個循環,是畫運動的物體
- drawGroundPlane(); // 再繪制鏡子一般的地面。在繪制前取消光照,打開混合,然後繪制。繪制後還原狀態。
- drawModels(1); // 再繪制所有模型
- drawFadeQuad(); // 最後繪制淡出框,用融合的方式畫一個遮住整個視口的2D框,融合系數和時間相關。

⑦ opengl固定管線是什麼意思關鍵是固定管線不知道什麼

GPU和CPU一樣按照要一定指令進行計算。不同的是GPU往往有成百上千個運算器,這使得前面的數據還沒處理完,後面的數據就能進來一起處理,和流水線生產一樣,效率很高,這就叫管線。
那我們要知道指令是怎麼產生的,對於固定管線,指令是OPENGL內置的,或者是OPENGL根據你的需求自動調整的,總之,你不必知道這些指令是什麼,也就是說指令是固定的。
相對於固定管線來說,另一個是可編程管線,使用可編程管線可以直接編寫顯卡指令,不但能完成所有固定管線能做的,還能編寫更豐富的特效,充分發揮GPU性能,缺點是自己寫的東西很多。 不過要理解3D的原理,即使你不自己寫指令,也要了解一下大致步驟。

⑧ Android opengl es 2.0怎麼學習

OpenGLES是一個讓人崩潰的東西。在Andorid手機上做3D還就得用它。把我記的一些筆記分享在這里吧:

Android OpenGL ES簡介 20011-6-3
Android系統使用OpenGL的標准介面來支持3D圖形功能,android 3D圖形系統也分為java框架和本地代碼兩部分。
本地代碼主要實現的OpenGL介面的庫,在Java框架層,javax.microedition.khronos.opengles是java標準的OpenGL包,
android.opengl包提供了OpenGL系統和Android GUI系統之間的聯系。
Android的本地代碼位於frameworks/base/opengl下,
JNI代碼位於frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp,
java類位於opengl/java/javax/microedition/khronos下
本地測試代碼位於frameworks/base/opengl/tests。包括angeles、fillrate等14個測試代碼,這些代碼都可以通過終端進行本地調用測試(模擬器中使用adb shell)。
OpenGL ES 1.x
固定管線操作,支持glVertexPointer()等函數,不支持GLSL。頭文件在ndk的GLES目錄下,庫文件是libGLESv1_CM.so。
OpenGL ES 2.x
可編程管線操作,不兼容1.x,不支持固定管線操作,例如glVertexPointer()等函數。支持GLSL(還必須用這個來編程)。頭文件在ndk的GLES2目錄下,庫文件是libGLESv2.so。

OpenGL ES學習 2011-6-30
OpenGL定義了自己的數據類型。應該堅持使用這些OpenGL的數據類型,從而保證可移植性和效率。
OpenGL ES 目前不支持64位數據類型。
OpenGL ES 只支持三邊形。
OpenGL ES 只支持gl開頭的函數,glu庫都不支持。
OpenGL ES 從 OpenGL中刪除的功能:
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

OpenGL ES 2.0 2011-10-9
2.0和1.1不兼容。
- 2.0使用的頭文件是ndk的include目錄下的GLES2目錄,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目錄。
- 2.0使用的庫文件是ndk的lib目錄下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。
- 2.0中取消了很多1.1函數,例如glMatrixModel和glLoadIdentity等。
OpenGL著色語言(GLSL――OpenGL Shading Language)
- 使用2.0,必須學此語言。因為很多1.1的函數都被取消了。

san-angeles NDK OpenGL ES 1.1的例子程序 2012-3-8
San Angeles,查維基網路,是一個虛構的未來概念城市,位於南加州。常在電影中出現,來源自Los Angeles和San Diego.
該程序的演示效果是,觀察一個宏偉的城市,地面是鏡面有建築倒影,城市中有飛船飛過。前後有5、6個觀察點,而且鏡頭在每個觀察點不停的移動。
這個例子,用NDK(C++)調用OpenGL ES 1.1來繪制了San Angeles這個城市。基本上全部使用了NDK,Java程序只有1個。
用vc2005演示一下,目的通過跟蹤代碼了解一些細節。方法是:
- 將jni下所有的.h文件,以及demo.c,app-win32.c復制出來,放在一個專門的目錄下,然後改造成用OpenGL的而不是ES的。(或者乾脆刪除大段的繪制代碼,保證編譯通過)
首先分析Java代碼
- DemoActivity.java,這是唯一的Java文件,它主要需要下列4個jni的介面:
- private static native void nativeInit(); // 初始化
- private static native void nativeResize(int w, int h);
- private static native void nativeRender(); // 繪制1幀
- private static native void nativeDone();
其次分析C++代碼 app-android.c
- 首先,調用了importGLInit(),動態導入OpenGL的庫。
- 其次,調用了 appInit(),在內存中建立了平台無關的3D對象集合。建立方法是用一個數組,用類似畫圓拔高的方式產生諸多三角形。
- 然後,在每個時鍾周期中調用appRender(),細節是:
- prepareFrame(width, height); // 准備OpenGL ES繪制框架。其實就是清空顏色和深度緩沖,重置投影和模型矩陣。
- camTrack(); // 算好在當前時鍾周期,鏡頭的位置、朝向及焦距等。然後調用gluLookAt來實現。
- configureLightAndMaterial(); // 設置光源和材質
- drawModels(-1); // 先繪制倒影(其實就是將所有模型z軸倒過來畫)
- 第一個循環,是畫精緻的物體
- 第二個循環,是畫運動的物體
- drawGroundPlane(); // 再繪制鏡子一般的地面。在繪制前取消光照,打開混合,然後繪制。繪制後還原狀態。
- drawModels(1); // 再繪制所有模型
- drawFadeQuad(); // 最後繪制淡出框,用融合的方式畫一個遮住整個視口的2D框,融合系數和時間相關。

⑨ OpenGL ES是什麼

該API由Khronos集團定義推廣,Khronos是一個圖形軟硬體行業協會,該協會主要關注圖形和多媒體方面的開放標准。 OpenGL ES 是從 OpenGL 裁剪定製而來的,去除了 glBegin/glEnd,四邊形(GL_QUADS)、多邊形(GL_POLYGONS)等復雜圖元等許多非絕對必要的特性。經過多年發展,現在主要有兩個版本,OpenGL ES 1.x 針對固定管線硬體的,OpenGL ES 2.x 針對可編程管線硬體。OpenGL ES 1.0 是以 OpenGL 1.3 規范為基礎的,OpenGL ES 1.1 是以 OpenGL 1.5 規范為基礎的,它們分別又支持 common 和 common lite兩種profile。lite profile只支持定點實數,而common profile既支持定點數又支持浮點數。 OpenGL ES 2.0 則是參照 OpenGL 2.0 規范定義的,common profile發布於2005-8,引入了對可編程管線的支持。 OpenGL ESOpenGL ES 是免授權費的,跨平台的,功能完善的2D和3D圖形應用程序介面API,它針對多種嵌入式系統專門設計 - 包括控制台、行動電話、手持設備、家電設備和汽車。它由精心定義的桌面OpenGL子集組成,創造了軟體與圖形加速間靈活強大的底層交互介面。 OpenGL ES 包含浮點運算和定點運算系統描述以及 EGL針對便攜設備的本地視窗系統規范。OpenGL ES 1.X 面向功能固定的硬體所設計並提供加速支持、圖形質量及性能標准。OpenGL ES 2.X 則提供包括遮蓋器技術在內的全可編程3D圖形演算法

閱讀全文

與opengl可編程管線相關的資料

熱點內容
如何測試流媒體伺服器的並發能力 瀏覽:159
溯源碼有分國家認證的嗎 瀏覽:218
如何通過app查詢產檢報告 瀏覽:944
拉結爾安卓手機怎麼用 瀏覽:695
驅動級進程代理源碼 瀏覽:782
androidshape畫線 瀏覽:510
程序員想辭職被拒絕 瀏覽:101
java面試邏輯 瀏覽:749
如何下載全英文app 瀏覽:724
js函數式編程指南 瀏覽:380
為什麼安卓手機相機啟動會卡 瀏覽:341
python中t是什麼意思 瀏覽:765
移動硬碟內存加密 瀏覽:407
單片機測角度 瀏覽:864
URL伺服器地址怎麼填 瀏覽:438
壓縮餅干會導致血糖高嗎 瀏覽:569
cad中xc命令怎麼用 瀏覽:424
戴爾伺服器怎麼看網卡介面 瀏覽:823
鹽鐵論pdf 瀏覽:424
最短路徑的生成演算法可用 瀏覽:457