# Camera following a "path"

**URL:** <https://discourse.processing.org/t/camera-following-a-path/2468>\
**Category:** Coding Questions\
**Created:** [August 8, 2018, 9:15am UTC](https://discourse.processing.org/t/camera-following-a-path/2468 "2018-08-08T09:15:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![marcoctn](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@marcoctn](https://discourse.processing.org/u/marcoctn)\
**Post date:** [August 8, 2018, 9:15am UTC](https://discourse.processing.org/t/camera-following-a-path/2468/1 "2018-08-08T09:15:00Z")

</div>

Good morning all, this is my first post 🙂  
I have what I hope is a simple question.  
In the code below, I made a 3d tunnel with a camera that goes in it.  
if I want to make the tunnel curve, how can I have the camera follow the curvature?

(hope the code will make sense to you). Thanks a lot, as a long time lurker I love this community.

```auto
int step=4;
float cameraZ=0;

void setup(){

  size(1280,720,P3D);
  colorMode(HSB);

}

void draw(){
 
    float tunnelLen=2000;
    float __distanza=(tunnelLen+2400-cameraZ)/2; // weird but it does the job :)
    
    background(20);
    rectMode(CENTER);
   
    lights(); 
    smooth();
   
  
    strokeWeight(1);
    noFill();
    
    
    updateCamera(__distanza);
   
    
    for (int i = 0; i<tunnelLen;i=i+4){
       
          
        pushMatrix();
           translate(0,0,i);
           //Uncomment the lines below
             
                  //float rotation = (i/4);  
                  //rotateY(radians(rotation));
            
           float hue_=map(i,0, tunnelLen, 10, 200);
           float sat_=map(i,0, tunnelLen, 219, 110);
           float bri_=map(i,0, tunnelLen, 250, 50);
           color colorelinea=color(hue_,sat_,bri_);
           stroke(colorelinea);
      
           float x1=width/2-100;
           float y1=height/2-100;
           float x2=width/2+100;
           float y2=height/2+100;
         
           linea(x1,y1,x2,y1);
           linea(x2,y1,x2,y2);    
           linea(x2,y2,x1,y2);
           linea(x1,y2,x1,y1);
        
        popMatrix();
       }
    
    cameraZ=cameraZ+1;

}

void updateCamera(float _distanza) {

     camera(width/2,height/2, _distanza, width/2, height/2, 0.0, 0.0, 1.0, 1.0);

}

void linea(float _x1,float _y1, float _x2, float _y2){
     
     line(_x1,_y1,_x2,_y2);
    
}

```
