■ 2008年12月06日 [OpenGL] デプスバッファの表示と画面表示の保存
2018年08月22日 11:53更新
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 というような連番ファイルで保存されます.既に存在する同名のファイルは上書きされてしまいます.
初めまして書き込みさせていただきます。<br>3DCGをやっている学生です。私は、逃避行動がひどいです。重要なプレゼンに限って、徹夜して、2時間前からパワポを作ります。。。。今日は締め切り前ということではないのですが、プログラムをしています。好きなので安心するのですが。<br><br>OpenGL画面の表示ですが、私の研究室でも画面保存をする機会がおおいですが、<br>GLInterceptで毎フレーム画面の保存をするプラグインを作ったら、とても便利になりました。これを使うと、個別のプログラム毎に画像保存のメソッドを仕込んでコンパイルし直す手間が省けますし、高度な画像フォーマットに対応する手間も結果的に削減できます。<br>http://glintercept.nutty.org/<br>便利ですよ。
tsurushuu さま,コメントありがとうございます.私もプログラム書いてると,それで安心してしまいます.それから,GLIntercept の情報ありがとうございました.これは便利そうですね.OpenGL や shader のデバッグにも使えそうです.使ってみます.
はじめまして宜しくお願いします。<br>商品展示の為の撮影時、クロマキー合成グリーンバック不要の撮影が可能なのか?(手間を省略したいとの思いで)ある被写体の背景で一定にの距離以上を消去する方法があればと思いますが、ビットマップデータ<br>の利用とか可能でしょうか?<br>知恵をお貸しください。
仲嶺朝次さま、コメントありがとうございます。<br>背景除去はやはりグリーンバック・ブルーバックを用いた方が品質が良いと思われますが、それらを用いずに背景を除去する手法やアプリケーションもたくさん存在するようです。<br>単純な手法では、例えば被写体が含まれない状態で背景だけを先に撮影しておいて、それと被写体を含む画像を比較(減算)してマスクを作る背景差分法があります。<br>一定以上の距離を持つ被写体の背景を除去する方法は、Kinect や RealSense などの深度(距離)を取得するカメラを使用すれば可能ですが、カラーカメラとの位置合わせの精度に起因する問題が起こるかもしれません。
背景処理について、貴重なお時間をいただきありがとうございました。<br>貴殿の情報を参考にさせていただきます。