littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

THETA Sの動画をopenframeworksで全天球再生(その2)

前回の記事の後に、 もともと参考にさせていただいていた@dotchangさんからアドバイスをいただきました。

で、それを踏まえて実装したら、本当に簡単に再生でき、アプリが60FPSも出るように(元動画は30FPSですが、、)

@dotchangさんの以下の記事を元に、ofImageをofVideoPlayerにほぼ変えただけです。FBOも必要ない。

一応、変更内容を書くと

  • setup()で img.loadfile()の代わりに動画読み込み
//setup()
get_angles(filename.data());
myPlayer.load(filename);  //ofVideoPlayer myPlayer;
myPlayer.play();
  • update()で動画アップデート
//update()
myPlayer.update();
  • draw()でmyPlayerを直接bind()  ※FBOは直接bind()できませんでした。
//draw()

cam.begin();
ofPushMatrix();
//ofMultMatrix(m_yaw); // adjust north
ofMultMatrix(m44.getInverse());
ofMatrix4x4 rot(0,-1,0,0,
    0,0,-1,0,
    1,0,0,0,
    0,0,0,1);
ofMultMatrix(rot);
myPlayer.bind();
ofSphere(10);
myPlayer.unbind();
ofPopMatrix();
cam.end();

ofSetWindowTitle(ofToString(ofGetFrameRate(), 0));//フレームレート表示

pointCloudを活用するなら前回の方法も良いですが、動画再生、画像加工なら今回の方が断然良いですね。

とても勉強になりました。

--

追記12/9

  • iOS でもひとまず、oF0.8.4で軽々動作しました。 draw()の
myPlayer.bind();

myPlayer.getTextureReference().bind();

に変更しています。

Openframeworks Essentials

Openframeworks Essentials