3D圖形編程屆的扛把子「OpenGL」到底厲害在哪?

2020-12-19 鄧鋤頭挖科技

大家可能對圖形編程有些陌生,往小了說,我們在計算機或手機上玩遊戲時,看到的一些3D特效,都是通過圖形編程實現的。往大了說,無論是Windows、iOS還是Android,能看到的界面本身就是圖形編程的傑作。

圖形編程面臨的一個最基本的問題就是如何用程序在顯示器上繪製東西,比如一個按鈕、一張美女圖片、一個正在放「大招」的英雄。簡單來說,有兩種繪製方式:一種是CPU在內存裡準備好了要繪製的東西,然後交給顯示器顯示;另一種是顯卡在顯存裡準備好要繪製的東西,交給顯示器顯示。前者稱為軟體繪製,因為CPU本身並不擅長做圖形相關的運算,效率也就高不到哪兒去。後者稱為硬體加速,顯卡天生就是用來處理圖像的,所以效率很高。這也就是為什麼我們常說大型遊戲「吃顯卡」,但只需要一個入門級的CPU就能流暢運行了,因為在它們運行的時候,CPU其實是個配角。

那麼問題來了,如何才能充分調動顯卡的強大能力,幫助我們繪製圖形呢?OpenGL就是為此而生的。OpenGL是一組API,這些API可以運行在不同的平臺上,可以支持各種語言。最重要的是,它能利用顯卡的硬體加速能力,幫助我們繪製圖形。

700多個API,每個API代表一種能力,比如其中有一個叫glClearColor,可以把屏幕塗成用戶想要的顏色。OpenGL 得以流行,還有一個很重要的原因是跨平臺。無論用 C++語言寫程序,在PC上運行,還是用Objective-C語言寫程序,在iOS上運行,都能用OpenGL。Java能夠實現跨平臺是因為它下面有一個虛擬機,不同的平臺都做了兼容,給上層調用的都是一樣的API。OpenGL也是這樣做的。用OpenGL做圖形編程,根本不用擔心平臺不適配問題,因為已經有人把這些髒活累活都做了,適配好了。但是讀者可千萬不要誤會,以為OpenGL就只是幾百個API。

實際上它有自己的一套規則。在任何一本介紹OpenGL的書上,都能看到這樣一句話:OpenGL是一個狀態機。什麼意思呢?狀態機控制很多狀態不停地切換。OpenGL的幾百個API裡,有不少是用來設置狀態的。每次設置一個狀態,都是一次狀態切換,直到最終繪製完成。比如設置畫筆的顏色是紅色,那麼之後繪製的所有圖形都是紅色的,直到設置成綠色,後面才會繪製綠色的圖形。

我們用地圖導航舉例。當用戶選定了目的地之後,導航路線就生成了。用戶可以把整條路線裡的每一條小路當作一個狀態,每進入一條小路就切換一次狀態。這樣經過一個又一個的狀態切換,最後會到達目的地。

對OpenGL來說,狀態切換過程結束,繪製任務就完成了。OpenGL的繪製流程大約要經過幾個步驟。首先,要把要畫的東西拆成三角形之類的基本圖形,然後在三維空間坐標系裡給它們安排合適的位置,之後把燈光加上去,使要畫的東西有一種立體感,最後,把這些東西轉化成屏幕上的像素點(即光柵化),整個繪製就算是完成了。OpenGL這兩年比較火,主要還是因為iOS和Android都靠它來做遊戲、寫界面。嚴格地說,在移動平臺上,大家用的是OpenGL-ES,是OpenGL的一個子集。

OpenGL 有700多個API,OpenGL-ES 裁掉了其中不常用的、移動端不好用的一些API。麻雀雖小,五臟俱全,OpenGL-ES也可以充分發揮顯卡的硬體加速能力,讓手機界面操作如絲般順滑。

相關焦點

  • OpenGL vs Direct3D
    官方網站:https://edu.battlefire.cn簡介從2005年開始,圖形顯卡總會同時實現
  • Python 30 行代碼畫各種 3D 圖形
    mplot3d Toolkit 即 mplot3d 工具包,在 matplotlib 中使用 mplot3d 工具包。繪製 3D 圖可以通過創建子圖,然後指定 projection 參數 為 3d 即可,返回的 ax 為 Axes3D 對象。
  • 《數碼寶貝》裡泉光子郎的編程水平到底有多厲害?
    然而當時動畫給的一個畫面就是光子郎的屏幕是我們熟悉的【編程】,那《數碼寶貝》裡泉光子郎的編程水平到底有多厲害呢?知乎上有一位大神藉此做了解答。題圖:Random Forest/知乎怎樣評價《數碼寶貝》第一部中的泉光子郎的編程水平?
  • Github霸榜:從零開始學3D著色器編程
    著色器編程不光是對開發技能的考驗,更是對程式設計師想像力的挑戰,以至於有說法稱會寫Shader的程式設計師是站在食物鏈頂端的人。想成為遊戲開發高手,著色器編程是必備技能。有興趣在3D遊戲中添加紋理,光照,陰影,法線貼圖,環境光遮蔽了嗎?好極了!今天新智元為大家帶來一個Github項目,從零開始教會大家進行3D遊戲著色。
  • 想不到許嵩也是編程高手,厲害
    想不到許嵩也是編程高手,厲害!並且還表示,自己從高中起就很喜歡計算機編程,有時間去就會去找找靈感。妥妥地一枚編程高手啊!少兒編程主要涉及三大類程式語言:scratch、python、c++。想不到許嵩也是編程高手,厲害!
  • 遊戲界的扛把子、3D 遊戲之父約翰•卡馬克的傳奇人生
    卡馬克靠著自學成才,成功地踏入了編程領域。剛讀大一的他已經編寫出了許多有趣的小遊戲,其中的多款被軟體公司看中並買走,他因此成了幾家軟體公司的兼職程式設計師,並逐漸在遊戲軟體領域小有名氣。1990 年,正在讀大二的卡馬克被一家名為 Softdisk 的軟體公司相中,力邀他加入公司一起開發遊戲軟體。出於對遊戲軟體的熱愛,卡馬克毫不猶豫地接受了對方的邀請,並辦理了輟學手續。
  • 「找差距、促提高、共成長」——第二屆人人編程專班「圖形化編程...
    1回憶篇MEMORY河南經濟貿易技師學院人人編程專班開課也有一段時間了,同學們還記得第一次上課是什麼樣子嘛?第一次接觸NEO編程軟體、第一次使用編程軟體做作品又是什麼樣子呢?是不是已經可以輕鬆地做出編程小作品?你又有了哪些進步呢?為了促進學生學習,提高學生的積極性,檢驗專班學生階段性學習成果,2020年12月25日,河南經濟貿易技師學院第二屆人人編程專班「圖形化編程」階段性專業知識競賽成功舉辦。河南經濟貿易技師學院藝術教育系董純瑋書記、人人編程專班班主任劉欣老師,人人編程可樂老師受邀擔任本次比賽評委。
  • 瑪塔兒童編程機器人,不要識字就能玩,讓每位兒童都成為創造者
    無論哪一款套在小機器人身上,瑪塔就會立馬變得不一樣。可添加豆丁爸爸私人微信「xiaodouding723」下面我們具體了解一下它,看看這款要靠搶的機器人到底為什麼這麼風靡編程繪畫,聽起來好像很新奇,可玩起來也是挺簡單的:讓瑪塔機器人插上筆放在紙上,通過程序編寫控制機器人行進的距離和轉彎的角度,讓機器人畫出不同的圖形。
  • 阿迪達斯生產3D列印口罩怎麼回事 3D列印口罩可以預防病毒嗎
    D技術是什麼3d是three-dimensional的縮寫,就是三維圖形。在計算機裡顯示3d圖形,就是說在平面裡顯示三維圖形。不像現實世界裡,真實的百三維空間,有真實的距離空間。計算機裡只是看起來很像真實世界,因此在計算機顯示的3d圖形,就是讓人眼看上就像真的一樣。
  • 3d模型 / 國內外好用的模型下載網站介紹
    隨著3D技術的發展,建模技術的飛速進步,3d技術的跨界以及創新永無窮盡。近幾年3d模型在網上鋪天蓋地,3d模型正在以我們所不能想像的速度在快速更替。常見的國內外3d模型庫海量,對於設計師來說,如此多的模型網站,但是真正想找模型的時候,有的下載價格很貴,有的質量很差,花一分鐘細細想一想,究竟哪家網站的3d模型網站哪呢?在此我整理了一下2020年比較好用的3D模型網站,希望為廣大設計師們提供更多尋找模型的便利。
  • 一年級第四單元有趣的圖形4.1認識圖形
    教學這部分內容,首先可以通過對立體圖形的一個面的描述,切入對平面圖形的初步認識,如讓學生看一看、摸一摸相關立體圖形的面。再照課本上的樣子畫一畫,抽象出平面圖形。在此基礎上讓學生想一想,周圍哪些物體的一個面是長方形、正方形、三角形、圓,生活中在哪些地方見到過這些圖形。
  • 3d建模軟體手機版有哪些?這3款好用的手機3d建模軟體你一定要有
    3d建模軟體手機版有哪些?對於一些三維設計師來說,能夠在手機上隨時隨地進行三維建模是一件很方便的事。本期,模型云為您整理了這3款好用的手機3d建模軟體介紹,快來和我們一起看看吧!3款好用的手機3d建模軟體3d建模軟體手機版一:MeshMixerMeshMixer是一款操作簡單的手機3d建模工具,其主要功能包括3D列印改進、製造切片工具、拖放及把原本組合在一起的多個不同的幾何體分成單獨的對象等,且支持PLY二進位格式、3Dconnexion空間滑鼠。
  • 你可能看了部假的3D電影!
    (1)2D:2D電影其實就是一般製作剪輯的電影,並沒有運用到其他過多的技術手段;(2)3D:3d是three-dimensional的縮寫,就是三維圖形。在計算機裡顯示3d圖形,就是說在平面裡顯示三維圖形。不像現實世界裡,真實的三維空間,有真實的距離空間。計算機裡只是看起來很像真實世界,因此在計算機顯示的3d圖形,就是讓人眼看上就像真的一樣。
  • Scratch編程19:如何用畫筆積木畫複雜的圖案
    這一篇我們會畫一個稍微複雜的圖形,畫筆的積木很簡單,主要是觀察圖形,看怎麼畫。【練習】圖1是我們這次要畫的圖形。任務內容:我們要畫的圖形如圖1。觀察圖形,可以看的出,同一顏色畫一個正方形,然後換個顏色,轉個角度,再接著畫正方形。從圖形的中心點出去的線一共有12條,也就是說畫了12個正方形。2)程序設計第一步:初始化畫筆。
  • scratch3數學之美04-圖形旋轉之美
    大家好,我是愛編程的小熊,前面幾節我們學習了繪製一些基本圖形,這節開始,我們將學習更加複雜絢麗的圖案,及其運動等。編程描述:我們已經學會了繪製幾何圖形,現在我們來將這些幾何圖形旋轉一下會是怎麼樣的,然後再改變一下畫筆的顏色又會是怎麼樣的,讓我們來看一下吧編程思路:
  • 【Scratch編程競賽題】繪製六芒星
    基礎圖形:基礎圖形為菱形,菱形的基本特徵是四條邊長度一致。菱形的其中一個內角在中心排列,形成一個圓角。編程所需要的參數:最大的菱形邊長(畫筆步長):50內角1=60°,內角2=120°(計算方法:圓角=360°,內角1:360°÷6=60°,根據平行四邊形的特徵,另一個內角為180°-60°=120°)顏色參數已給出:83 73 71
  • 30行Python代碼實現3D數據可視化
    mplot3d Toolkit,即 mplot3d 工具包。 as npfig = plt.figure()# 指定圖形類型是 3d 類型ax = fig.add_subplot(projection='3d')# 構造數據X = np.arange(-5, 5, 0.25)Y = np.arange(-5, 5, 0.25)X, Y = np.meshgrid(X, Y)