床井研究室

雨が凶暴

前回、雨が凶暴と書いてからも雨は猛威を振るい続け、非常に痛ましいことになっております。この前の日曜プログラミングで作った地理院地図 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);
    }

    ...

書き替え量がわずかなので、独立したプログラムを用意する必要はないと思ったんですが…