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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

429閲覧

センサーで認識した手の軌跡を描く

na830

総合スコア1

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2023/02/09 05:54

実現したいこと

リープモーションで認識した手の動きに合わせて、パーティクルで軌跡を描きたいです。
その際に、下の画像のようにフェードして残像を残すような動きにしたいです。
イメージ説明

前提

パーティクルのかたまりが手の動きに合わせて一緒に動くところまで出来ました。
背景で動画が再生されているため、簡単なフェードアウトが使えません。

該当のソースコード①

Processing

1import processing.video.*; 2import com.leapmotion.leap.*; 3ParticleSystem ps; 4Controller leap = new Controller(); 5InteractionBox iBox; 6 7PGraphics pg; 8 9int n = 15; 10int x; 11Movie[] video = new Movie[n]; 12 13void setup() { 14 size(1280, 800, P2D); 15 colorMode(HSB,100); 16 frameRate(30); 17 background(0); 18 smooth(); 19 ps = new ParticleSystem(new PVector(50, 50)); 20 21 video = new Movie[n]; 22 for (int i = 0; i < n; i++) { 23 video[i] = new Movie(this, "mv" + i + ".mov"); 24 } 25} 26 27void draw() { 28 29 background(0); 30 31 float d = video[x].duration(); 32 float t = video[x].time(); 33 34 if (t < d) { 35 image(video[x], 0, 0, width, height); 36 37 } else { 38 39 Frame frame = leap.frame(); 40 HandList hands = frame.hands(); 41 int h = hands.count(); 42 43 if (0 < h) { 44 x = int(random(n)); 45 println(x); 46 47 if (0 < video[x].time()) { 48 video[x].jump(0); 49 } 50 video[x].play(); 51 } 52 } 53 ps.addParticle(); 54 ps.run(); 55} 56 57void movieEvent(Movie video){ 58 video.read(); 59}

該当のソースコード②

Processing

1class Particle { 2 PVector position; 3 PVector velocity; 4 PVector acceleration; 5 float lifespan; 6 float lifespan2; 7 float Size = random(0, 10); 8 9 Particle(PVector l) { 10 acceleration = new PVector(0, 0.05); 11 velocity = new PVector(random(-5, 5), random(-5, 5)); 12 position = l.copy(); 13 lifespan = 300.0; 14 lifespan2 = 60.0; 15 } 16 17 void run() { 18 update(); 19 display(); 20 } 21 22 void update() { 23 velocity.add(acceleration); 24 position.add(velocity); 25 lifespan -= 10.0; 26 lifespan2 -= 2.0; 27 } 28 29 void display() { 30 Frame frame = leap.frame(); 31 HandList hands = frame.hands(); 32 iBox = frame.interactionBox(); 33 for(int i = 0; i < hands.count(); i++) { 34 Hand hand = hands.get(i); 35 drawPalm(hand); 36 } 37 } 38 39 void drawPalm(Hand hand) { 40 Vector palmPos = hand.palmPosition(); 41 Vector palmPosNorm = iBox.normalizePoint(palmPos, false); 42 pushMatrix(); 43 translate(palmPosNorm.getX() * width, 44 (1 - palmPosNorm.getY()) * height); 45 stroke(99, 0, 99, lifespan2); 46 fill(c()); 47 ellipse(position.x, position.y, Size, Size); 48 popMatrix(); 49 } 50 51 boolean isDead() { 52 if (lifespan < 0.0) { 53 return true; 54 } else { 55 return false; 56 } 57 } 58 59 color c(){ 60 color c = color(random(30,90), 99, 99, lifespan); 61 return c; 62 } 63}

該当のソースコード③

Processing

1class ParticleSystem { 2 ArrayList<Particle> particles; 3 PVector origin; 4 5 ParticleSystem(PVector position) { 6 origin = position.copy(); 7 particles = new ArrayList<Particle>(); 8 } 9 10 void addParticle() { 11 particles.add(new Particle(origin)); 12 } 13 14 void run() { 15 for (int i = particles.size()-1; i >= 0; i--) { 16 Particle p = particles.get(i); 17 p.run(); 18 if (p.isDead()) { 19 particles.remove(i); 20 } 21 } 22 } 23}

試したこと

フェードをかけると動画まで見えなくなってしまうため、使えませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

描画した点をすべて覚えておいて、時間経過でフェードしていくように全描画点を更新していくようにする必要がありますね

投稿2023/02/09 06:00

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

na830

2023/02/18 07:32

回答ありがとうございます! その場合どのようなコードになりますでしょうか?初心者のため、描画した点を覚えるという部分などがどのようなコードになるかイメージできておらず、お手数お掛けして申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問