雨が凶暴
前回、雨が凶暴と書いてからも雨は猛威を振るい続け、非常に痛ましいことになっております。この前の日曜プログラミングで作った地理院地図 3D を Oculus Rift (DK2 じゃないやつ) で見るプログラムで被災地の上をフライスルーしてみたのですが、住宅と山が入り組んだ非常に複雑な地形でした。私が途方に暮れていても仕方ないのですけど、それでも無力感で下を向いてしまいます。
このムービーは和歌山県内の山間部です。
フレーム間差分
前回のサンプルプログラム (3) は、わずかな書き替えでフレーム間差分の表示を行うようにすることができます。キャプチャした画像を転送するテクスチャを、フレームごとに切り替えるだけです。
...
// uniform 変数のインデックスの検索(見つからなければ -1)
const GLuint image0Loc(glGetUniformLocation(program, "image0"));
const GLuint image1Loc(glGetUniformLocation(program, "image1"));
// テクスチャの格納先
int select = 0;
// ウィンドウが開いている間繰り返す
while (window.shouldClose() == GL_FALSE)
{
if (camera.grab())
{
// キャプチャ映像から画像を切り出す
cv::Mat frame;
camera.retrieve(frame, 3);
// 切り出した画像をテクスチャに転送する
cv::Mat flipped;
cv::flip(frame, flipped, 0);
glBindTexture(GL_TEXTURE_RECTANGLE, image[select = 1 - select]);
glTexSubImage2D(GL_TEXTURE_RECTANGLE, 0, 0, 0, frame.cols, flipped.rows, GL_BGR, GL_UNSIGNED_BYTE, flipped.data);
}
...
書き替え量がわずかなので、独立したプログラムを用意する必要はないと思ったんですが…