##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
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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.background
とoffscreen.fill
の値が違うだけです。
環境は、
- Macbook(2017)
- Processing(3.5.3)
- keystone(006)
です。
OSが違いますが、多分動くと思います。
参考になれば幸いです。
投稿2019/08/13 04:49
総合スコア27
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。