Macの標準OSがMacOSからOSXとなり、ゲームを動作させる環境がガラリと変わってしまいました。特に高速なゲームを開発していた人たちにとってはディスプレイ周りの仕様の変更は大きな混乱を招いたことだと思います。
OSXではディスプレイのポートに直接アクセスできなくなったため、PaintやLine、CopyBits等のQuickDraw描画ファンクションによる描画先は、新しいウインドウを開いた際に取得されるウインドウバッファというメモリとなります。(MacOSではWindowPortにつながる画素へのベースアドレスはディスプレイの左上の座標、即ちVRAM上でしたが、現在ではウインドウバッファとなっています。ウインドウバッファがメインメモリかVRAM上にあるかは不明。) そして頃合いを見計らってウィンドウマネージャはこのウインドウバッファの内容をディスプレイに表示します。この方式のメリットは、従来では絶対にできなかったウインドウ移動中やジニー中の画面更新ができることです。しかもプログラマが全く意識すること無しにです。(従来の方式ではウインドウ移動中に描画対象アドレスが変化してしまうため不可能)
また、この方式はウインドウバッファの描画が一通り済んだあとに行われますので、常に完全な画面を、即ちエクセルなどでスクロール後文字がチラチラ更新描画されることなく得ることができます。更に、自前でこのちらつきを抑えるためダブルバッファ方式をインプリメントしていたプログラムもその作業から解放されるわけです。
ただ、この方式もいいことづくめではなく、当然大きなウインドウを移動したり更新するとなればそれなりのCPUパワーが必要となります(ウインドウの一部分のみ更新される場合やグラフィックアクセラレータが担当する場合は負担軽減となると思われる)し、ゲームなどでオフスクリーンからディスプレイへ転送する際になんらかの処理(スケーリングや、論理オペレーション、色変更など)を挟んだものではオフスクリーンからウィンドウバッファ、そしてディスプレイへと転送が起きますので動作がより重くなります。
この問題を回避する方法として、フルスクリーンモードの使用という手がありますが、メニューが使えなくなったり、アプリを切り替えられなくなったり、ドックに格納できなくなったりとで結構格好悪いですよね。...で、この問題を回避、更にはもっとパワーアップしたゲームが創れるかもしれない方法として、グラフィックアクセラレータを使ってみたいと思います。
グラフィックアクセラレータの機能が保証されない今までは、ゲームでオブジェクトの表示といえば、CopyBits等に代表されるビットマップ転送(ブリット)でした。ビットマップ転送は1画素(又は数画素)に対して一度(又は何度か)CPUを介すため、高速なCPUと高速なメモリ-CPU間のバスが必要となります。
その昔、68KMacからPowerPCに遷移しつつある時代、システムバスクロックはCPUクロックと共に上がっていきました。ところがその後、システムバスクロックの速度は高周波技術的な問題から頭打ちとなっています。(第2世代PPCマシンが出た頃、CPU100MHz・バス50MHz。現在、CPU約1GHz・バス100MHz: ...CPU10倍、バス2倍)
これはどういうことかというと、もうこれ以上ビットマップ転送では高速化を望めないということです。例えるなら、今後幾ら待ったところで、巨大なキャラが画面中を飛び回るようなゲームを創ることはできないということです。
もちろん、今のマシンで5年前無理だったことをやろうとすれば、簡単に実現できることは間違いないのですが、ゲーム専用機の性能があがり、その発色数、解像度を一旦見てしまえば、自分のゲームも大画面、フルカラー高解像度にしたい等、それなりのクオリティが欲しくなるのは人情というもででしょう。→
Windowsでは簡単に行われているビットマップ拡大表示(ローレゾモード)も、
その機能がないMacで実現するには大変な苦労を強いられることになります...。
現在Macで、グラフィックアクセラレータの機能を利用する方法として、OpenGLとクォーツ2D(他にQuickDrawなんとか)がありますが、情報量、言語面でもOpenGLに分があります。しかもOS付属の、ProjectBuilder(現Xcode)でデフォルトで開発できます。
というわけで、OpenGLから始めることにします。
何事にも初めはありますが、まずとっかかりとして書籍やサンプルがあると便利です。サンプルはWeb上に溢れていますが自分のレベルや目的にあった物を探すのは大変です。ここでは3D知識皆無の僕が訪問して「!」だったところをリンクしたいと思います。
(OpenGLに関する書籍はいくつか出てるようですが、目的にあわない物が多い、ネット上の先人による資料が充実している、なによりも本自体手に入れることが大変なのでいまのところ無しでやってます。)
☆
GLUTによる「手抜き」OpenGL入門 (床井浩平氏)
http://www.center.wakayama-u.ac.jp/~tokoi/opengl/libglut.htmlここはまさにMacOSXユーザの初めの一歩になるようなすばらしいページ。なんと1ページで基礎をバッチリ押さえてあります。筆者もMacOSXユーザのようなので安心。このページ、印刷して手元に置いてあります。
OpenGL Programming (SONSON氏)
http://www.geocities.jp/yuichiy2001/gl/index.htm行列変換を行う順序などの説明があります。またFaqや高度なテクニックなども解説してあるのでスキルアップしたら再び勉強できそうです。
OpenGL入門(赤坂 玲音氏)
http://black.sakura.ne.jp/~third/system/opengl/gl.html
筆者は解説本ライターなようなので分かりやすい。テクスチャマッピングや初心者向けリファレンスとして何度も利用させていただきます。
Codesampler.com
http://www.codesampler.com/oglsrc.htm
OpenGLのサンプルが沢山あります。目的の物が手に入るかもしれません。(Macでテクスチャサンプルを使用する場合はエンジアンの違いがあるので注意です。)
「Xcode+GLUT」はMacユーザがOpenGLを学ぶのに最短かつ最適な環境。
OSXユーザなら、上記のサイトを参考にしてすぐに3Dグラフィックが描けるようになる?
031114版 初版