• 締切済み

OpenGLで原寸大表示

リアルタイムのWebカメラ映像にOpenGLで生成した3Dオブジェクトを重ねて表示させてARのようなものを作っています。 OpenGLのオブジェクトの大きさを、現実世界の原寸大の大きさで表示させたいのですが、 どうすればいいのでしょうか? Webカメラの焦点距離と画角はわかったので、 そこからプロジェクション行列を計算しOpenGLに設定はしました。

みんなの回答

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

 ご質問からは、一体何にお困りなのか、問題の所在がさっぱり分からないんです。  たとえば現実世界の中に1辺10cmの立方体が置いてあって、それをweb camで捉えているとします。その像が画面上でどんな風に写るかは、当然、カメラと立方体との位置関係に依ります。(逆に言えば、勝手な立方体の図をCGで作って表示し、「これは現実世界の原寸大で1辺10cmの立方体なんだ」と言い張れば、誰も否定できません。そういう風に写るような位置関係も確かにあるからです。)また、「リアルタイム」と仰っているからには、カメラが動くことをお考えなのだろうか。もしそうなら、カメラの位置と向きをリアルタイムで常時高い精度で計測する手段がなくては話になりません。  と、こんなオバカなレベルで躓いているというご質問ではないのだとするなら、ですね、「現実世界の立方体の像が、計算とは違って微妙に歪んでいるのをどうする」という問題が次に来る筈です。これはカメラの歪みをきちんと計測して補正関数を決定するほかありません。これを手作業でやると、とても地味で時間が掛かってめんどくさい上に、もしカメラを変えたらその努力は無に帰してしまう。ぜひとも自動化しなくちゃいけません。

関連するQ&A

  • カメラで撮影した画像をOpenGLで表示する方法

    webカメラで撮影した映像を,OpenGLを用いて表示することを考えております. 撮影した映像を,できる限り高速に表示する方法を教えていただけないでしょうか? 用途としては,仮想世界の視点移動に合わせて,カメラで撮影した画像を張り付けたポリゴンを 自由な視点から観察することを考えています. 私の考えつく解決策は,以下の通りです. 1.OpenGLの背景(バックバッファ)の領域を指定し,書き込む 2.ポリゴンにテクスチャマッピング 2.について実装してみたのですが,表示速度がいまひとつでした. 実装としては,テクスチャ用画像を,毎フレーム更新して, テクスチャマッピングする方法をとっています. コードを抜粋したものは,以下の通りです. ------------------------------------ glBindTexture(GL_TEXTURE_2D, g_texture[0]);//テクスチャの指定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texture_img[0]->width,texture_img[0]->height, GL_RGB,GL_UNSIGNED_BYTE,texture_img[0]->imageData); ---------------------------------- ※texture_img[0]を毎フレーム更新して,テクスチャマッピング お忙しいと思いますが, アドバイスをいただけますと幸いです. よろしくお願いいたします.

  • WEBカメラでタイムスタンプ表示したい

    WEBカメラで撮影しているペットの映像をリアルタイムでネット公開しているのですが、先日無断で使用されているのが発覚しました。 そういった無断使用を避けるためにも、タイムスタンプやテキスト(ペットの名前)を表示できるようなソフトやそのような機能が備わっているWEBカメラをご存知でしたら教えてください。

  • プログラミングのopenglで困っています.

    OpenGlの超初心者です. openglで,円を一つ作ってあるsampleプログラムを拾ってきたのですが, 円をもう一つ,別の座標で作りたいのですが,以下のプログラムをどのように編集すればいいですか? 誰か助けてください. ========================================== #include <GLUT/glut.h> #include "glut.h" #include <math.h> //--初期化処理------------------------------------------------------------------ void myinit(void){ glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//背景色の設定(R,G,B,ALPHA) 0.0-1.0の範囲で } //--描画内容-------------------------------------------------------------------- void display(void){ float x1,y1,x2,y2; float th1,th2; float th1_rad, th2_rad; float hankei = 0.1; glClear(GL_COLOR_BUFFER_BIT);//画面全体を背景色で塗りつぶす glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //単位行列を行列スタックに読み込む glColor3f(0.0f, 0.0f, 0.0f);//頂点カラーの指定( R, G, B すべてが1.0fなら白) for (th1 = 0.0; th1 <= 360.0; th1 = th1 + 10.0){ th2 = th1 + 10.0; th1_rad = th1 / 180.0 * 3.1415926; // 「度」を「ラジアン」に直す th2_rad = th2 / 180.0 * 3.1415926; x1 = hankei * cos(th1_rad); y1 = hankei * sin(th1_rad); x2 = hankei * cos(th2_rad); y2 = hankei * sin(th2_rad); glBegin(GL_LINES);//glBegin(GL_LINES)とglEnd()の間に glVertex2f( x1, y1 ); //描画したい直線の頂点を並べる glVertex2f( x2, y2 ); glEnd(); //ここまでで,ひとつのオブジェクトの宣言がおわる } glFlush();//OpenGLで実際に描画を行う } //--再描画---------------------------------------------------------------------- void myReshape(GLsizei w, GLsizei h){ glViewport(0,0,w,h); //ウィンドウ全体をビューポートにする glMatrixMode(GL_PROJECTION); glLoadIdentity();//単位行列を行列スタックに読み込む glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); } //--メイン関数------------------------------------------------------------------ int main(int argc, char **argv){ glutInitWindowPosition(100, 100); //(図形が描画される)ウィンドウ位置の設定 glutInitWindowSize(600, 600); //(図形が描画される)ウィンドウサイズの設定 glutInit(&argc, argv);//環境の初期化 glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE); //表示モードの設定 glutCreateWindow("kadai"); //ウィンドウを開く glutDisplayFunc(display); //図形表示関数の指定 myinit(); glutReshapeFunc(myReshape); //座標軸・ビューポート設定関数の指定 glutMainLoop();//無限ループ return 0; } ==========================================

  • WEB上のネットワークカメラの映像を録画したいです。

    ネットワークカメラを使用して映像をWEB上に表示しています。 リアルタイムで表示しているので、wmvファイルとかではありません。 このWEB上で表示されている映像を録画したいのですが、可能でしょうか? 可能だとすると、どのようなソフトがありますか? フリーソフトなどもあれば教えて下さい。 画像はMotion-JPEG対応と書いてありました。

  • 30万画素CMOSイメージセンサの映り具合

    スカイプで映像会話をしようと思って、下記スペックのwebカメラ購入を検討してるのですが、映り具合とかどうでしょうか? やはりCCDタイプの方がいいのでしょうか? 形式: CMOSセンサ 一体型USB対応PCカメラ 画角 :最大53° 撮像素子: 1/4型CMOSイメージセンサ 撮影距離: 50cm~∞(固定焦点) 有効画素数: 30万画素

  • CCDカメラの撮影範囲とテレビモニターでの表示範囲のずれ

    CCDカメラの撮影範囲とテレビモニターでの表示範囲のずれ 単焦点レンズを取り付けたCCDカメラを用いて部屋の天井から床を撮影する事を考えています.CCDカメラで撮影した映像はVIDEO_TRACKERを通してテレビに表示するようにしています. そこで問題があります.レンズの画角や,天井(カメラ)から床までの距離から計算した撮像範囲と,実際にテレビに表示されている範囲が異なるのです.それも誤差とみなせないほどの差で,幅と高さともに1m以上も計算した値より狭い範囲しかテレビには表示できていません. 現在より広い範囲を撮影するために,新たに広角なレンズを購入しようと思っているのですが,レンズのスペック通りの撮影範囲を確保できるのかがわからず困っています. 詳しい方がいらっしゃれば,ご教授お願いします.

  • Dream Weaber8

    Dream Weaber8でWebカメラの映像(リアルタイム動画)をWeb上で配信したいのですが?著書でもいいです。お願いします。YK

  • webカメラを通して動画を見せるには?

    webカメラを使ってメッセンジャーなどを使って、その動画(リアルタイム映像)を見せることは出来ます。 ただ、自分で持っている動画を相手に見せたい場合を考えています。 相手に送ると大変なので、その映像をwebカメラの画面を使って見せたいと考えています。 この場合どのようなソフトを使えばいいのでしょうか? カメラをPC画面に向けるというのは無しでお願いします。 あくまで、動画の出力をwebカメラの画面にしたいのです。 なにか良い方法はありませんか?

  • webカメラの映像が表示されなくなってしましました

    先日、サンワサプライのウェブカメラCMS-V22SETSVを購入して2,3日は使えたのですが突然webカメラの映像が表示できなくなってしまいました。 映像の表示にはAMCAPというソフトを使用しており、エクスプローラーで表示してみましたがマイコンピューターの中にカメラのアイコンはあるのですがやはり映像は表示されませんでした。 デバイスはちゃんと認識されており、再インストールしても変化はありませんでした。また、USBをハブを介さず直接PCに付け替えなども試してみましたがダメでした。 カメラの故障かなと思い別のPCで試してみたところちゃんと映像は表示されました。 カメラが使えなくなる前に増設や新しくUSBを追加するなどのこのはやっていないのですが・・・どなたか何か思いつくことがある方がいらっしゃれば何でもいいので回答お願いします。 OS:XP CPU:core2 duo メモリ:2G

  • 携帯電話(docomo)でライブカメラの映像を見ることは可能ですか?

    携帯電話(docomo)でライブカメラの映像を見ることは可能ですか?(たとえば部屋に設置しているウェブカメラの映像をケータイでリアルタイムに見るなど。)おすすめのウェブカメラシステムがあればご教示いただければ幸いです。また、システムを構築するための方法と費用なども知りたいです。