We are about to switch to a new forum software. Until then we have removed the registration on this forum.

- All Categories 25.7K
- Announcements & Guidelines 13
- Common Questions 30
- Using Processing 22.1K
- Programming Questions 12.2K
- Questions about Code 6.4K
- How To... 4.2K
- Hello Processing 72
- GLSL / Shaders 292
- Library Questions 4K
- Hardware, Integration & Other Languages 2.7K
- Kinect 668
- Arduino 1K
- Raspberry PI 188
- Questions about Modes 2K
- Android Mode 1.3K
- JavaScript Mode 413
- Python Mode 205
- Questions about Tools 100
- Espanol 5
- Developing Processing 548
- Create & Announce Libraries 211
- Create & Announce Modes 19
- Create & Announce Tools 29
- Summer of Code 2018 93
- Rails Girls Summer of Code 2017 3
- Summer of Code 2017 49
- Summer of Code 2016 4
- Summer of Code 2015 40
- Summer of Code 2014 22
- p5.js 1.6K
- p5.js Programming Questions 947
- p5.js Library Questions 315
- p5.js Development Questions 31
- General 1.4K
- Events & Opportunities 289
- General Discussion 365

Can someone explain this framecount*i,and how it is used in the sketch.Because when i put out i,from the equation the vertices dont move independently.Thanks in advance

```
import peasy.*;
import saito.objloader.*;
OBJModel model ;
OBJModel tmpmodel ;
PeasyCam cam;
float easing = 0.005;
int VertCount;
PVector[] Verts;
void setup()
{
size(800, 600, P3D);
frameRate(30);
noStroke();
model = new OBJModel(this, "Model2.obj", "absolute", TRIANGLES);
model.enableDebug();
model.scale(100);
model.translateToCenter();
tmpmodel = new OBJModel(this, "Model2.obj", "absolute", TRIANGLES);
tmpmodel.enableDebug();
tmpmodel.scale(100);
tmpmodel.translateToCenter();
cam = new PeasyCam(this, width/2, height/2, 0, 500);
}
void draw()
{
background(129);
lights();
int VertCount = model.getVertexCount ();
PVector[] Verts = new PVector[VertCount];
//cam.rotateY(0.05);
cam.setMouseControlled(true);
//println(frameCount);
pushMatrix();
translate(width/2, height/2, 0);
for (int i = 0; i < VertCount; i++) {
//PVector orgv = model.getVertex(i);
Verts[i]= model.getVertex(i);
//PVector tmpv = new PVector();
if (frameCount> 100) {
float randX = random(-0.05, 0.05);
float randY = random(0, 0.05);
float randZ = random(0, 0.05);
////HERE
float norX = abs(cos((frameCount+i))) * randX;
float norY = abs(cos((frameCount+i)) * randY);
float norZ = abs(cos((frameCount+i)) * randZ);
Verts[i].x+=Verts[i].x*norX;
Verts[i].y+=Verts[i].y*norY;
Verts[i].z+=Verts[i].z*norZ;
if (Verts[i].x > width/2|| Verts[i].x < -width/2) {
Verts[i].x+=Verts[i].x*-0.05;
}
if (Verts[i].y > height/2|| Verts[i].y < -height/2) {
Verts[i].y+=Verts[i].y*-0.05;
}
if (Verts[i].z < -600/2 || Verts[i].z > 600/2) { //note that Zaxis goes 'into' the screen
Verts[i].z+=Verts[i].z*-0.05;
}
}
PVector locas = new PVector(Verts[i].x, Verts[i].y, Verts[i].z);
tmpmodel.setVertex(i, locas.x, locas.y, locas.z);
}
noStroke();
tmpmodel.draw();
popMatrix();
translate(width/2, height/2, 0);
noFill();
stroke(255);
box(width, height, 600);
}
```

## Answers

i is 0 for the first vertex, 1 for the second etc. so each vertex is rotated further than the one before.

framecount changes with time starting at 1, so the first time through the first vertex is at 0 + 1 = 1, the second time through it's 0 + 2 = 2. so it moves with time. this is what causes the animation.

ok thank you,i have an other problem,i want every vertex move as a particle,i tried for( : ) loop but it gives null pointer exception,with for( ; ; ;) loop the move goes to the whole object,not individual vertex.Is any way to get the vertices and add them individual move?

Sorry for the push,but i have to make it for my degree until September,and i am in hurry.

I have tidied up your code getting rid of all that vertical whitespace so it is clearer.

Just to start it is not

`frameCount*1`

it is`frameCount+1`

.Looking at your code you are using the unchanged model vertices for the first 100 frames then in lines 58 - 78 you are modifying the individual vertex position. Do you understand what is actually happening in this code? Did you write it?

Unfortunately it doesn't make much sense mathematically. The use of the

`cos`

functione seems to indicate that you want some cyclic function e.g. maybe to produce some vibration.Consider the statement

`float norX = abs(cos((frameCount+i))) * randX;`

you have an extra pair of parenthesis which we can remove to get`float norX = abs(cos(frameCount+i)) * randX;`

Take the inner bit first

`cos(frameCount+i)`

this will calculate the cosine of`frameCount + 1`

radians. The cosine of an angle is always in the range -1 to +1 so`abs(cos(frameCount+i))`

will always return a value of 0 to +1. The distribution of the cosine means that approximately 30% will be in the range 0-0.5 and the remaining 70% in the range 0.5-1.0So you have a value in the range 0.0-1.0 which you multiple by a random number (

`randX`

) in the range -0.05 and 0.05 so the result will still be arandomnumber in the range -0.05 and 0.05 with 30% in the range -0.05 and 70% in the range 0-0.05The point is that if you multiple a number by a random number you still get a random number

I suggest that you replace the lines

`float randX = random(-0.05, 0.05);`

`float norX = abs(cos((frameCount+i))) * randX;`

with the single line

`float norX = cos(frameCount+i) * 0.05;`

This will give you a cyclic number in the range - 0.05 to 0.05

The only other observation is that the increment inside the cosine is rather course (1 radian ~ 57.3 degrees) so you might apply adjust it to get a smoother change in norX with

`float norX = cos((frameCount+i)*0.1) * 0.05;`

yeah i know what is happening in that code,some parts i copy paste them,and then modified them.The parenthesis was a relic from some previous experimentation with cos, sin, abs and noise.To see what is happening,i am somehow new in the concepts of sin and cos and how they are combined .I will see what are you suggesting.I want to ask you,what if i use an for( : ) loop,can i add random move to individual vertices?and not to the whole object?I tried it.like for (PVector v : Verts){ do that }.and it gave me null pointer.Maybe i should copy the array and the do the for each loop? Thanks alot