MacOS + Cocoa + OpenGL 4.0 排雷指南

今天我折騰了半天,終于能在Macbook上快樂地寫起OpenGL程序了,吼吼。網(wǎng)上有關(guān)OpenGL的教程基本是在Windows平臺運行的,在OSX上面的教程實在是不多,即使是Apple官方的文檔也有很多地方?jīng)]有說清楚。從開始折騰到最后順利運行走了不少彎路,真是一把辛酸淚...

轉(zhuǎn)動的方塊

但是作為一個辛勞而且忙碌的蘑菇,在這里我就不把所有的步驟都詳細地寫出來了,只把思路和注意事項記一記,道上的旁友如果看到有用的信息,自然是樂事一件。如果大家都覺得看了沒有收獲,那我只好安慰自己說,等我老年癡呆的時候又想撿起OpenGL玩時,這篇筆記總會派上用場的。

原料

扯遠了,首先我把這道菜的原料(啥)列出來在下面。
1 OpenGL Book
這是一篇我目前覺得最好的入門讀物,雖然是Windows平臺的,但是因為OpenGL本身與平臺無關(guān),所以讀這個可以很好地入門。我在OSX里嘗試實現(xiàn)的也是這里的例子。

2 Apple官方文檔
怎么港,雖然文檔有點過時,但是還是很有借鑒意義的。Apple里面推薦的GUI是Cocoa,而不是FreeGlut。此外,GLUT和GLEW都集成在系統(tǒng)里了,這下什么也不用自己裝。所以看看文檔,怎么用這些現(xiàn)成的工具搭起一個環(huán)境,還是很必要的。

3 大牛教你Modern OpenGL
一個國內(nèi)開發(fā)游戲的大牛,Zenny Chen(雖然孤陋寡聞的我,在這之前也是不知道的……)。這里介紹了怎樣在NSOpenGLView里面獲取3.2版本以上的OpenGL Core Context。
不過我要說一下,如果想在Storyboard里面直接加NSOpenGLView,Context肯定是不能在initWithFrame里面創(chuàng)建了。那就放在awakeFromNib的方法里面也可以,也是來得及的。

4 Context訪問控制 線程鎖
唔,本來前3個看起來就挺不錯的了,但是你會發(fā)現(xiàn)生成的圖像,它,它不會動啊……這怎么用來畫動畫?
要讓程序自動刷新界面,還需要調(diào)用OSX的顯卡驅(qū)動的API,叫DisplayLink,讓它在刷新界面時調(diào)用OpenGL的繪制。但是因為調(diào)用的時候會并發(fā)許多線程來訪問Context,然后就會互相沖突訪問資源,就需要在繪制之前加上線程鎖。這個文檔里也沒講清楚,但是sample code里面是有的,我在stack overflow里看到的。

5 計算時間的鬼trick
不造Apple怎么弄的系統(tǒng),c語言的timer.h基本是不能用的。算出來的動畫就忽快忽慢,我想是為了節(jié)約CPU資源的trick。
入鄉(xiāng)隨俗,老老實實用NS的objective c的庫計算時間吧。

實現(xiàn)思路

1 就先建個Cocoa
2 就繼承一個NSOpenGLView,然后重載一些初始化函數(shù),包括reshape, drawrect, prepareOpenGL 什么什么的
3 在storyboard里面把view加到界面里,另外鉤上隨著窗口尺寸縮放,不然任你拽來拽去它都不會甩你的
4 在awakeFromNib里加上獲取酷炫高端亞克西的Core Context的代碼
5 然后如果要動畫那么就加上Display link callback,不要忘了線程鎖

最后

一切才剛剛開始。
雖然已經(jīng)可以一邊吃瓜一邊看著demo傻笑了,但是紋理呀,光源呀,shader呀,好玩的還在后面呢。
沒有下集預(yù)告,但是如果順利的話,防老年癡呆筆記還是會慢慢更新的。
那么就先這樣吧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,667評論 30 472
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,839評論 4 61
  • 今天我們幾個朋友愉快地在一起聚餐
    Llfzyh閱讀 207評論 0 0
  • 有所求才有所求時 你還會幫我嗎? 你還是會幫我吧。 然而, 我并不知道, 我到底想求你什么; 不過, 你是知道的,...
    三年後閱讀 353評論 0 1

友情鏈接更多精彩內(nèi)容