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

但是作為一個辛勞而且忙碌的蘑菇,在這里我就不把所有的步驟都詳細地寫出來了,只把思路和注意事項記一記,道上的旁友如果看到有用的信息,自然是樂事一件。如果大家都覺得看了沒有收獲,那我只好安慰自己說,等我老年癡呆的時候又想撿起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ù)告,但是如果順利的話,防老年癡呆筆記還是會慢慢更新的。
那么就先這樣吧!