2024/10/25(金) [n年前の日記]
#2 [proce55ing][processing][javascript] p5.jsを少し勉強
JavaScriptライブラリ、p5.js について少し勉強してみた。
環境は Windows10 x64 22H2 + Visual Studio Code (VSCode) 1.94.2 + Google Chrome 130.0.6723.70。p5.js は 1.10.0。
p5.js (p5.min.js) 単体は以下から入手できる。
_Download
あるいは、CDN に置かれている p5.min.js を呼び出してもいい。URLは上記のページに記載してある。
環境は Windows10 x64 22H2 + Visual Studio Code (VSCode) 1.94.2 + Google Chrome 130.0.6723.70。p5.js は 1.10.0。
p5.js (p5.min.js) 単体は以下から入手できる。
_Download
あるいは、CDN に置かれている p5.min.js を呼び出してもいい。URLは上記のページに記載してある。
◎ 画像の読み込みと回転 :
png画像を読み込んで、回転させながら描画することができるかテストしてみた。以下で動作を確認できる。
_rotateimage
zip でもまとめておいた。
_rotateimage.zip
JavaScriptのソース (sketch.js) は以下。
今回の使用画像は以下。png, jpg, gif 等、Webブラウザが対応してる画像なら使えるのではないか。たぶん。
_leaf.png
index.html は以下。p5.min.js と sketch.js を呼び出している。
ファイル構成は以下。
_rotateimage
zip でもまとめておいた。
_rotateimage.zip
JavaScriptのソース (sketch.js) は以下。
var img; var ang = 0; function setup() { createCanvas(windowWidth, windowHeight); img = loadImage("./leaf.png"); angleMode(DEGREES); } function draw() { background("#356ea7"); // draw axis line stroke(0); strokeWeight(1); line(0, windowHeight / 2, windowWidth, windowHeight / 2); line(windowWidth / 2, 0, windowWidth / 2, windowHeight); // draw rotate image push(); x = windowWidth / 2; y = windowHeight / 2; translate(x, y); rotate(ang); image(img, 0, -img.height / 2); pop(); ang += 2; }
- setup() に初期化処理を、draw() に毎フレームの描画処理を書く。
- loadImage() で画像を読み込み、image() で画像を描画。
- angleMode(DEGREES) で、角度の指定単位を「度」にする。
- translate() でキャンバスの原点を変更。
- rotate() でキャンバスを回転。
- windowWidth, windowHeight で、ウインドウの横幅と縦幅を取得できる。
今回の使用画像は以下。png, jpg, gif 等、Webブラウザが対応してる画像なら使えるのではないか。たぶん。
_leaf.png
index.html は以下。p5.min.js と sketch.js を呼び出している。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sketch</title> <style> html, body { margin: 0; padding: 0; } canvas { display: block; } </style> <script src="libraries/p5.min.js"></script> </head> <body> <script src="sketch.js"></script> </body> </html>
ファイル構成は以下。
. |-- libraries | `-- p5.min.js |-- index.html |-- leaf.png `-- sketch.js
◎ パーリンノイズの値を取得 :
パーリンノイズ(Perlin noise)の値を取得できそうかテストしてみた。
_パーリンノイズ - Wikipedia
要は、滑らかに変化していくノイズ、とでも思っておけばいいのかな…?
以下で動作確認ができる。
_noise_test
zip にもしておいた。
_noise_test.zip
sketch.js は以下。
_パーリンノイズ - Wikipedia
要は、滑らかに変化していくノイズ、とでも思っておけばいいのかな…?
以下で動作確認ができる。
_noise_test
zip にもしておいた。
_noise_test.zip
sketch.js は以下。
let t = 0; function setup() { createCanvas(400, 400); } function draw() { background(220); x = 400 * noise(t); // noise() returns a value between 0.0 - 1.0 line(x, 0, x, 400); t += 0.025; }
- noise() を使うとパーリンノイズの値 (0.0 - 1.0) を取得できる。
◎ マウス情報を取得 :
マウスカーソルの座標や、マウスボタンが押されたかどうかを取得したい。以下で動作確認できる。
_get_mouse_info
zip にもしておいた。
_get_mouse_info.zip
sketch.js は以下。
_get_mouse_info
zip にもしておいた。
_get_mouse_info.zip
sketch.js は以下。
let mx = 0; let my = 0; let mes = ""; let mes2 = ""; let mes3 = ""; let count = 0; function setup() { createCanvas(400, 400); } function draw() { background(220); mx = mouseX; my = mouseY; if (mouseIsPressed) { if (mouseButton == LEFT) mes = "Left button"; if (mouseButton == RIGHT) mes = "Right button"; if (mouseButton == CENTER) mes = "Middle button"; } textSize(16); text(`mouse X,Y = ${mx}, ${my}`, 10, 20); text(mes, 10, 40); text(mes2, 10, 60); text(mes3, 10, 80); count++; } function mouseClicked(event) { mes2 = `mouseClicked(). count=${count} event.button=${event.button}`; } function mousePressed(event) { mes3 = `mousePressed(). count=${count} event.button=${event.button}`; } function mouseReleased() { mes = ""; mes2 = ""; mes3 = ""; }
- mouseX, mouseY で、マウスカーソル座標を取得できる。
- draw() の中で、mouseIsPressed が true になったら、マウスボタンが押された時と判定できる。
- mouseButton の値が、LEFT, RIGHT, CENTER かで、左ボタン、右ボタン、中ボタン(ホイールボタン)か判別できる。
- mouseClicked() という関数を用意すれば、マウスボタンが押されて離された時(クリックした時)に呼ばれる。ただし、左ボタンにのみ反応して、右ボタンや中ボタンには反応しない。
- mousePressed() という関数を用意すれば、マウスボタンが押された時に呼ばれる。こちらは、左ボタン、右ボタン、中ボタンでも反応する。
- mouseReleased() という関数を用意すれば、マウスボタンが離された時に呼ばれる。
- mousePressed(event) と書いた場合、event.button でどのボタンが押されたか判別できる。0なら左ボタン、1なら中ボタン、2なら右ボタンになっていた。
◎ キー入力を取得 :
キー入力を取得したい。以下で動作確認できる。
_get_key_info
zip にしておいた。
_get_key_info.zip
sketch.js は以下。
_get_key_info
zip にしておいた。
_get_key_info.zip
sketch.js は以下。
let mes = ""; let mes2 = ""; let mes3 = ""; let count = 0; let klist = ["a", "b", "c", "d", "e", "r", "z"]; function setup() { createCanvas(400, 400); } function draw() { background(220); mes3 = ""; if (keyIsPressed){ for (let k of klist){ if (key == k) mes3 = `[${count}] Press ${k.toUpperCase()}`; } } textSize(16); text("Pleae push A/B/C/D/R/Z key", 10, 20); text(mes, 10, 40); text(mes2, 10, 60); text(mes3, 10, 80); count++; } function keyTyped() { for (let k of klist) { if ( key == k ) mes = `[${count}] keyTyped() : ${k.toUpperCase()} key`; } } function keyPressed() { for (let k of klist) { if ( key == k ) mes2 = `[${count}] keyPressed() : ${k.toUpperCase()} key`; } } function keyReleased() { mes = ""; mes2 = ""; }
- draw() の中で、keyIsPressed が true になったら、キーが押されてる状態と判別できる。
- key の中に、押されたキーの種類が入ってる。
- 関数 keyTyped() を用意すれば、キーが押された時に呼ばれる。
- 関数 keyPressed() を用意すれば、キーが押された時に呼ばれる。
- 関数 keyReleased() を用意すれば、キーが離された時に呼ばれる。
◎ 余談。ローカルサーバを立ち上げる方法 :
p5.js 関係の動作確認をしたい時は、ローカルサーバを立ち上げて、Webブラウザでローカルサーバ経由で index.html等にアクセスして、ということをしないといけないのだけど。
Python 3.x がインストールされている環境なら、Python を使ってローカルサーバを起動することができる。DOS窓を開いて、以下を打てばいい。
以下、参考ページ。
_pythonでローカルwebサーバを立ち上げる Python - Qiita
もっとも、VSCode (Visual Studio Code) を使っているなら、Live Server等の拡張をインストールすればローカルサーバをワンクリックで起動できるので、そちらを使ったほうが…。
Python 3.x がインストールされている環境なら、Python を使ってローカルサーバを起動することができる。DOS窓を開いて、以下を打てばいい。
python -m http.server 8000
- Webブラウザで http://localhost:8000 にアクセスすれば、ローカルサーバにアクセスできる。
- ローカルサーバの終了は、Ctrl + C。
以下、参考ページ。
_pythonでローカルwebサーバを立ち上げる Python - Qiita
もっとも、VSCode (Visual Studio Code) を使っているなら、Live Server等の拡張をインストールすればローカルサーバをワンクリックで起動できるので、そちらを使ったほうが…。
[ ツッコむ ]
以上です。