質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.71%

processingのkeystoneで動画を再生できません

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 659
退会済みユーザー

退会済みユーザー

processingでプロジェクションマッピングをします。

1.https://fh-potsdam.github.io/doing-projection-mapping/workflows/

2.http://d.hatena.ne.jp/kougaku-navi/20120109/p1
などで使い方を読んでみましたが、keystoneで動画を再生できません。

2では、バージョンの違いが原因かもしれませんが、動いているはずなのに実行画面が表示されませんでした。

全くの初心者なのですが、keystoneライブラリ上で動画を再生できるプログラムをご教授頂けないでしょうか。

お助けいただけると大変助かります。よろしくお願いいたします。

補足情報

windows 10 64bit
processing 3.3.7
keystone version 006

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

僕も初心者なのですが、Githubのdoing-projection-mappingのプログラム例と、yoppa.org 第2回: Processingでプロジェクション・マッピングをプログラミングを参考にして以下のプログラムを作ったところ、動きました。

main.pde

import deadpixel.keystone.*;
import processing.video.*;

Keystone ks; // Keystone本体

// それぞれのアニメーションをクラスとして定義
SurfaceA surafaceA;
SurfaceB surafaceB;
// SurfaceC surafaceC;
MovieSurface mov_surface;

void setup() {
  // 初期設定
  // size(1024, 768, P3D);
  fullScreen(P3D);
  frameRate(60);
  ks = new Keystone(this);
  // クラスの初期化
  surafaceA = new SurfaceA();
  surafaceB = new SurfaceB();
  // surafaceC = new SurfaceC();
  mov_surface = new MovieSurface();
}

void draw() {
  // アニメーションを描画
  surafaceA.draw();
  surafaceB.draw();
  mov_surface.draw();
  // surafaceC.draw();

  // それぞれのスクリーンにアニメーションを投射
  background(0);
  surafaceA.render();
  surafaceB.render();
  mov_surface.render();
  // surafaceC.render();
}

// キー入力設定
void keyPressed() {
  switch(key) {
  case 'c':
    ks.toggleCalibration();
    break;
  case 'l':
    ks.load();
    break;
  case 's':
    ks.save();
    break;
   case 'p':
     mov_surface.controlVideo();
  }
}

void movieEvent(Movie m) {
  m.read();
}

//escキーで終了する

MovieSurface.pde

class MovieSurface {
  CornerPinSurface surface;
  PGraphics offscreen;
  Movie mov;
  boolean isPlaying;
  MovieSurface() {
    // 射影変換する投影する平面の配列
    surface = ks.createCornerPinSurface(600, 600, 60);
    offscreen = createGraphics(600, 600, P3D);
    mov = new Movie(projection_mapping_with_video.this, "fingers.mov");
    print("made mov instance");
    mov.frameRate(25);
    print("set frameRate");
    mov.play();
    print("start playing video");
    mov.jump(0);
    print("jumped");
    mov.pause();
    print("paused");
  }
  void draw() {
    float diameter = sin(frameCount / 10.0) * 400 + 400;
    offscreen.beginDraw();
    offscreen.background(255);
    // offscreen.background(255, 255, 0);
    offscreen.image(mov, 0, 0);
    // offscreen.noStroke();
    offscreen.endDraw();
  }
  void render(){
    surface.render(offscreen);
  }
  void controlVideo() {
    if (isPlaying == false) {
      mov.play();
      isPlaying = true;
    } else {
      mov.pause();
      isPlaying = false;
    }
  }
}

SurfaceA.pde

class SurfaceA {
  CornerPinSurface surface;
  PGraphics offscreen;
  SurfaceA() {
    // 射影変換する投影する平面の配列
    surface = ks.createCornerPinSurface(600, 600, 60);
    offscreen = createGraphics(600, 600, P3D);
  }
  void draw() {
    float diameter = sin(frameCount / 10.0) * 400 + 400;
    offscreen.beginDraw();
    offscreen.background(255, 255, 0);
    offscreen.fill(0, 0, 255);
    offscreen.noStroke();
    offscreen.ellipse(300, 300, diameter, diameter);
    offscreen.endDraw();
  }
  void render(){
    surface.render(offscreen);
  }
}


SurfaceBとSurfaceCもあるのですが、ただのAの色違いなので、offscreen.backgroundoffscreen.fillの値が違うだけです。
環境は、

  • Macbook(2017)
  • Processing(3.5.3)
  • keystone(006)

です。
OSが違いますが、多分動くと思います。
参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.71%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる