[Processing]ゾートロープ的なもの
14861 ワード
的なもの
あまりよく見えないので、隙間からではなく上から見下ろしてます(ゾートロープじゃない気が…)
プログラム
Zoetrope.java
//Y軸回転
float rotateY = 0;
//画角
float fov = 3;
//回転速度
float speed = 0.01f;
//X軸回転
float rotateX = 0;
//円柱半径
float radius = 0;
//円柱高さ
float leng = 0;
//アニメーション番号
int aniNum = 0;
//貼り付ける画像
PImage tex;
void setup() {
size(1600, 800, P3D);
frameRate(30);
tex = loadImage("Zoetrope.png");
}
void draw() {
background(0);
lights();
perspective(PI/fov, (float)width/height, 10, 1000);
//操作説明
textSize(25);
text(" A :accel\n D :decelerate\n W :Just speed\n S :Stop\n Click :Zoom",
0, height-250);
translate(width/2, height/2+100, 100);
noStroke();
fill(255);
rotateX(rotateX);
rotateY(rotateY);
Cylinder(leng, radius);
rotateY += speed;
//アニメーションスウィッチ
switch(aniNum) {
case 0:
radius++;
aniNum++;
break;
case 1:
leng++;
if (leng >= 250) aniNum++;
break;
case 2:
radius ++;
if (radius >= 150) aniNum++;
break;
case 3:
rotateX -= PI/180;
if (rotateX <= -PI/4) aniNum++;
break;
}
}
//円柱メソッド
// Cylinder( 長さ , 半径 )
void Cylinder(float leng, float radius) {
float x, y, z;
pushMatrix();
//底面
beginShape(TRIANGLE_FAN);
y = leng / 2;
vertex(0, y, 0);
for (int deg = 0; deg <= 360; deg += 2) {
x = cos(radians(deg)) * radius;
z = sin(radians(deg)) * radius;
vertex(x, y, z);
}
endShape();
//側面
beginShape(QUAD_STRIP);
texture(tex);
textureMode(NORMAL);
for (int deg = 0; deg <= 360; deg += 1) {
x = cos(radians(deg)) * radius;
y = -leng / 2;
z = sin(radians(deg)) * radius;
normal(x, 0, z);
vertex(x, y, z, deg/360f, 0);
x = cos(radians(deg)) * radius;
y = leng / 2;
z = sin(radians(deg)) * radius;
normal(x, 0, z);
vertex(x, y, z, deg/360f, 1);
}
endShape();
popMatrix();
}
void keyPressed() {
//a で加速 d で減速 w でいい感じの速度 d で停止
if (key == 'a') speed += 0.01f;
else if (key == 'd') speed -= 0.02f;
else if (key == 'w') speed = 0.63f;
else if (key == 's') speed = 0;
}
void mousePressed() {
//画角切り替え
if (mouseButton == LEFT) {
fov = (fov+6)%12; //fovの値を3と9交互にする式
}
}
使用画像
Zoetrope.java
//Y軸回転
float rotateY = 0;
//画角
float fov = 3;
//回転速度
float speed = 0.01f;
//X軸回転
float rotateX = 0;
//円柱半径
float radius = 0;
//円柱高さ
float leng = 0;
//アニメーション番号
int aniNum = 0;
//貼り付ける画像
PImage tex;
void setup() {
size(1600, 800, P3D);
frameRate(30);
tex = loadImage("Zoetrope.png");
}
void draw() {
background(0);
lights();
perspective(PI/fov, (float)width/height, 10, 1000);
//操作説明
textSize(25);
text(" A :accel\n D :decelerate\n W :Just speed\n S :Stop\n Click :Zoom",
0, height-250);
translate(width/2, height/2+100, 100);
noStroke();
fill(255);
rotateX(rotateX);
rotateY(rotateY);
Cylinder(leng, radius);
rotateY += speed;
//アニメーションスウィッチ
switch(aniNum) {
case 0:
radius++;
aniNum++;
break;
case 1:
leng++;
if (leng >= 250) aniNum++;
break;
case 2:
radius ++;
if (radius >= 150) aniNum++;
break;
case 3:
rotateX -= PI/180;
if (rotateX <= -PI/4) aniNum++;
break;
}
}
//円柱メソッド
// Cylinder( 長さ , 半径 )
void Cylinder(float leng, float radius) {
float x, y, z;
pushMatrix();
//底面
beginShape(TRIANGLE_FAN);
y = leng / 2;
vertex(0, y, 0);
for (int deg = 0; deg <= 360; deg += 2) {
x = cos(radians(deg)) * radius;
z = sin(radians(deg)) * radius;
vertex(x, y, z);
}
endShape();
//側面
beginShape(QUAD_STRIP);
texture(tex);
textureMode(NORMAL);
for (int deg = 0; deg <= 360; deg += 1) {
x = cos(radians(deg)) * radius;
y = -leng / 2;
z = sin(radians(deg)) * radius;
normal(x, 0, z);
vertex(x, y, z, deg/360f, 0);
x = cos(radians(deg)) * radius;
y = leng / 2;
z = sin(radians(deg)) * radius;
normal(x, 0, z);
vertex(x, y, z, deg/360f, 1);
}
endShape();
popMatrix();
}
void keyPressed() {
//a で加速 d で減速 w でいい感じの速度 d で停止
if (key == 'a') speed += 0.01f;
else if (key == 'd') speed -= 0.02f;
else if (key == 'w') speed = 0.63f;
else if (key == 's') speed = 0;
}
void mousePressed() {
//画角切り替え
if (mouseButton == LEFT) {
fov = (fov+6)%12; //fovの値を3と9交互にする式
}
}
Author And Source
この問題について([Processing]ゾートロープ的なもの), 我々は、より多くの情報をここで見つけました https://qiita.com/NekoCan/items/a4405eb5abcb5d2021db著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .