«Athlon 64 X2 vs. Core 2 Duo 最新 FBO を使ってデプスバッファを表示する »

床井研究室


■ 2008年12月06日 [OpenGL] デプスバッファの表示と画面表示の保存

2008年12月06日 22:39更新

12月だ

ついに師走です.みんな忙しそうです.というか,みんな出張に行ってしまってます.廊下が静かです.なのに,なぜか私はここにいます.どうしてでしょう.なんだか焦ります.でも,他人と比較してても落ち込むだけです.とりあえず,目の前にあることだけでも片付けようと思います.

とは言いながら,そういうときに限って他のことがしたくなります.目の前の仕事が多いほど,そういう状況になります.いわゆる逃避行動ですね.というわけで,小ネタを2つメモ.どちらもやっつけ仕事で,深く考えてません.

デプスバッファの表示

卒研でデプスバッファを使ったネタをやっている学生さんがいるのですが,そういうときにはデバッグのためにデプスバッファの内容を確かめたくなることがあります.そのために作ったものがあります.

まず showdepth.h を読み込んでから,関数 showdepth() を呼び出します.

・・・
 
#include "showdepth.h"
 
static void keyboard(unsigned char key, int x, int y)
{
  switch (key) {
  case 'd':
  case 'D':
    /* d か D をタイプしたらデプスバッファの内容を表示 */
    showdepth();
    break;
    ・・・

glDrawPixels() を使っているのですが,表示位置を指定するために glRasterPos*() 使うと表示されたりされなかったりする(表示しようとする画像の左下の位置が誤差でビューポートから外れることがある?)ので,glRasterPos*() は使っていません.

画面表示の保存

OpenGL の表示を画像ファイルに保存するには,OS の画面キャプチャ機能や,Fraps のような画面キャプチャソフトウェアを使えばいいのですが,これも以前何か必要なことがあって作りました.

まず saveimage.h を読み込んでから,関数 saveimage() を呼び出します.

・・・
 
#include "saveimage.h"
 
static void keyboard(unsigned char key, int x, int y)
{
  switch (key) {
  case 's':
  case 'S':
    /* s か S をタイプしたら画面表示をファイルに保存 */
    saveimage();
    break;
    ・・・

画像は img00000.bmp,img00001.bmp というような連番ファイルで保存されます.既に存在する同名のファイルは上書きされてしまいます.

コメント(2) [コメントを投稿する]
tsurushuu 2008年12月06日 20:24

初めまして書き込みさせていただきます。<br>3DCGをやっている学生です。私は、逃避行動がひどいです。重要なプレゼンに限って、徹夜して、2時間前からパワポを作ります。。。。今日は締め切り前ということではないのですが、プログラムをしています。好きなので安心するのですが。<br><br>OpenGL画面の表示ですが、私の研究室でも画面保存をする機会がおおいですが、<br>GLInterceptで毎フレーム画面の保存をするプラグインを作ったら、とても便利になりました。これを使うと、個別のプログラム毎に画像保存のメソッドを仕込んでコンパイルし直す手間が省けますし、高度な画像フォーマットに対応する手間も結果的に削減できます。<br>http://glintercept.nutty.org/<br>便利ですよ。

とこ 2008年12月06日 22:05

 tsurushuu さま,コメントありがとうございます.私もプログラム書いてると,それで安心してしまいます.それから,GLIntercept の情報ありがとうございました.これは便利そうですね.OpenGL や shader のデバッグにも使えそうです.使ってみます.


編集 «Athlon 64 X2 vs. Core 2 Duo 最新 FBO を使ってデプスバッファを表示する »