• ベストアンサー

OpenGLでBMP画像を出力するには?

現在アニメーションの作成にOpenGLを使っています. この動画をきれいに保存したいのでBMP出力を考えています. 画面のキャプチャではなくBMPをプログラムにより 出力する方法を教えてください. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

はい.オフィシャルマニュアルの赤いやつと青いやつと緑のやつを持ってます.英語のリファレンスならgoogleで検索するとたくさんヒットする(MSDN英語サイトなど)ので,もし本を持ってなかったらそちらを参考にすると良いと思います. void glReadPixels(x, y, width, height, format, type, *pixels) x, yが取得領域左下の位置,width, heightが大きさ,formatが取得するデータの種類(=GL_RGB),typeがデータ型(=GL_UNSIGNED_BYTE),pixelsが取得データを格納する領域. ただし,これをする前にglReadBuffer(GLenum)でどのバッファから読むかを指定しないといけません.フロントバッファから読むんだったら, glReadBuffer(GL_FRONT); とします.

touru
質問者

お礼

ほんとにどうもありがとうございます. いろいろ参考にしてがんばっていきます.

その他の回答 (1)

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

どの部分が問題なんでしょうか? glReadPixelsでフレームバッファのRGB値を読出して,それにヘッダを付けてセーブするという流れだと思うんですが. ピクセルオーダーは左下から右上で同じだし,変換作業もあまり要らなさそうな. BMPは1ライン当り4の倍数バイトになってないと行けないらしいので,その調整だけは要るんですかね.取得する画像の幅を4の倍数ピクセルに固定するか,RGBA4バイトを取得してAを無視して32bit BMPにするかすれば調整無しで良さそうですね.各ラインを数バイトずつずらすよりOpenGLのデータ転送の方が早いだろうし. ところで,「画面のキャプチャ」機能ではダイレクトレンダリングをしているOpenGLの画面ってキャプチャ出来ないですよね.

touru
質問者

お礼

どうもありがとうございます. glReadPixelsって関数があるんですね. 使い方がはっきりわからないのでもう少し調べてみます. 画面のキャプチャは単に画面に描かれたものを保存する フリーソフトを使えばできました. ただ,画像に乱れがあるのでちょっと好ましくなくて. glReadPixelsの詳しい使い方は 参考書などを見られたのでしょうか?

関連するQ&A

専門家に質問してみよう