Processing 加工中的平滑旋转

Processing 加工中的平滑旋转,processing,Processing,我在教室里看了处理参考资料,并在动画中放了几个例子。我的教授没有在课堂上教授这些材料,他告诉我,如果能在堆栈溢出问题上得到社区的帮助,我可能会更走运。我的问题随之而来 当ry达到70时,旋转停止。我在代码中的问题所在位置添加了注释 我正在尝试制作一个连续平滑的动画 intx=200; int y=350; int-cubeWidth=300; int立方八=2; 浮动rY=0.1; 浮动rX=0.1; 无效设置(){ 尺寸(640、360、P3D); } void draw(){ 背景(3);

我在教室里看了处理参考资料,并在动画中放了几个例子。我的教授没有在课堂上教授这些材料,他告诉我,如果能在堆栈溢出问题上得到社区的帮助,我可能会更走运。我的问题随之而来

ry
达到70时,旋转停止。我在代码中的问题所在位置添加了注释

我正在尝试制作一个连续平滑的动画

intx=200;
int y=350;
int-cubeWidth=300;
int立方八=2;
浮动rY=0.1;
浮动rX=0.1;
无效设置(){
尺寸(640、360、P3D);
}
void draw(){
背景(3);
灯光();
填充(247、7、12);
rY=约束(rY,0,70);
rX=约束(rX,0,70);
pushMatrix();
平移(441,高度/立方高度,0);
rY=rY+.005;
println(rY);

rotateY(rY);//这正是您在这行代码中告诉它要做的:

rY=constraint(rY,0,70);
constraint()
函数将值限制为最小值和最大值,在本例中为
0
70

如果你把那条线拿出来,你的草图会一直旋转。更多信息可以在中找到


请注意,您使用
rX
变量做了一些奇怪的事情。出于某种原因,您似乎每次都要将它加倍。如果您不约束它,它很快就会变得太大。但由于您只将
.005
添加到
rY
,因此您不必约束它。

这正是您在这一行代码中告诉它要做的:

rY=constraint(rY,0,70);
constraint()
函数将值限制为最小值和最大值,在本例中为
0
70

如果你把那条线拿出来,你的草图会一直旋转。更多信息可以在中找到


请注意,您使用
rX
变量做了一些奇怪的事情。出于某种原因,您似乎每次都要将它加倍。如果不约束它,它很快就会变得太大。但由于您只将
.005
添加到
rY
,因此您不必约束它。

正如Kevin Workman所说,
rY=constraint(rY,0,70)
是问题所在。你刚刚给了旋转一个终点。我对代码做了一些修改,因为有一些逻辑错误,所以它一直在添加值,直到无穷大

rX+=rX;
增加加速度,因此在一段时间后,可以获得物体的较大速度,例如(0.1+0.1=0.2;下一帧0.2+0.2=0.4…等等)。如果你能想象每秒有100帧,它很快就会变得非常快。因此,你只需要增加速度,而不是加速度
rX+=1
,每个帧都会将旋转更新一个角度

你写了两次代码,所以在一个框架内它变得更大。我分享了我更新的代码,也许它会更清楚地看到其中的变化

float rY = 0.1; 
float rX = 0.1;

void setup() {
  size(640, 360, P3D);
}

void draw() { 

  background(3);
  lights();

  fill(125, 175, 225,175);

  pushMatrix();
  translate(width/2, height/2); // you do not need to write translate twice

  //box
  rY += 0.01; // you need only once to add the rotation value per frame
  rotateY(-rY); // negative rotation for the difference from sphere
  rX += 0.01;
  rotateX(-rX);
  noStroke();
  box(50); 

  //sphere
  rotateY(rY); 
  rotateX(rX);
  noFill();
  stroke(125, 175, 225,125);
  sphere(125);

  popMatrix();

  println(rY);
}

正如凯文·沃克曼所说,
rY=constraint(rY,0,70);
是问题所在。你刚刚给了旋转一个终点。我稍微修改了代码,因为有一些逻辑错误,所以它一直在添加值,直到无穷大

rX+=rX;
增加加速度,因此在一段时间后,可以获得物体的较大速度,例如(0.1+0.1=0.2;下一帧0.2+0.2=0.4…等等)。如果你能想象每秒有100帧,它很快就会变得非常快。因此,你只需要增加速度,而不是加速度
rX+=1
,每个帧都会将旋转更新一个角度

你写了两次代码,所以在一个框架内它变得更大。我分享了我更新的代码,也许它会更清楚地看到其中的变化

float rY = 0.1; 
float rX = 0.1;

void setup() {
  size(640, 360, P3D);
}

void draw() { 

  background(3);
  lights();

  fill(125, 175, 225,175);

  pushMatrix();
  translate(width/2, height/2); // you do not need to write translate twice

  //box
  rY += 0.01; // you need only once to add the rotation value per frame
  rotateY(-rY); // negative rotation for the difference from sphere
  rX += 0.01;
  rotateX(-rX);
  noStroke();
  box(50); 

  //sphere
  rotateY(rY); 
  rotateX(rX);
  noFill();
  stroke(125, 175, 225,125);
  sphere(125);

  popMatrix();

  println(rY);
}

你解决过这个问题吗?你解决过这个问题吗?