2025年5月15日 星期四

week13



 //week13_1_processing_video

//Sketch-Library-Manage Librarues...安裝video

//教學 https://processing.org/tutorials/video

import processing.video.*;  //java使用外掛的"匯入"

Capture video;  //有視訊鏡頭的,用這個版本

Movie movie;  //沒鏡頭 改用這個


void setup(){

  size(640,960);  //常見的視訊

  video=new Capture(this,640,480);

  video.start();  //打開視訊

  movie=new Movie(this,"street.mov");  //讀檔

  movie.loop();

}

void draw(){

  if(video.available())video.read();  //若沒有

  image(video,0,480);  //若沒有視訊 就註解掉

  if(movie.available())movie.read();

  image(movie,0,0);

}




//week13_2_camera_movie_eye_center_up

//電腦圖學在繪圖十 會設定camera的相關係數

import processing.video.*;  //要使用影片的外掛喔

Movie movie;  //要放影片的變數

void setup(){

  size(720,480,P3D);  //要記得加上P3D才能有OpenGL3D功能

  movie=new Movie(this,"street.mov");  //請再把street.mov拉進來

  movie.loop();  //迴圈播放 影片借西度720 X 480

}

void draw(){

  background(128);

  //https://processing.org/reference/camera_.html

  camera(mouseX,mouseY,500,360,240,0,0,1,0);

  //很多參數eyeX eyeY eyeZ centerX centerY centerZ upX upY upZ

  //                        現在把影片中心點當主角

  if(movie.available())movie.read();  //有新畫面 就讀入

  image(movie,0,0);  //放影片 放在0,0

}




//week13_3_texture_textureMode_beginShape

//先教"貼圖" 之後再加進去week13_2的camera設定

//https://processing.org/reference/texture_.html

PImage img;

void setup(){

  size(400,400,P3D);  //要加P3D才有OpenGL3D功能

  img=loadImage("chessboard.png");  //記得把圖拉進來

  textureMode(NORMAL);  //有很多種"貼圖模型"

}  //先用最簡單的NORMAL來畫  2個三角形  不像是3D透視效果

void draw(){

  background(128);  //灰背景

  beginShape();  //開始畫

  texture(img);  //把圖片 當貼圖

    vertex(40,80,0,0);  //4個頂點vertex的四邊形 會裁出2個三角形

    vertex(320,20,1,0);

    vertex(380,360,1,1);

    vertex(160,380,0,1);

  endShape();

}





//week13_4_camera_chessboard_texture_front_left

//把貼圖跟camera整合在一起

PImage img;

void setup(){

  size(400,400,P3D);

  img=loadImage("chessboard.png");

  textureMode(NORMAL);

void draw(){  //攝影機"往前方看" 左右、前後移動

  camera(mouseX,200,mouseY,mouseX,200,mouseY-10,0,1,0); 

  background(128);  //灰背景 

  beginShape();  //front 正前方 z座標都放0

    texture(img);

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(400,0,0,1,0);

    vertex(400,400,0,1,1);

    vertex(0,400,0,0,1);

  endShape();

  beginShape();  //left 左方 x座標都放0

    texture(img);

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(0,400,0,1,0);

    vertex(0,400,400,1,1);

    vertex(0,0,400,0,1);

  endShape();

}




//week13_5_camera_keyPresse_keyCode_x_y_z_angle_cos_sin

//修改自 week13_4_camera_chessboard_texture_front_left

//利用方向鍵(上下左右)來移動

PImage img;

void setup(){

  size(400,400,P3D);

  img=loadImage("chessboard.png");  //小心 要拉入圖檔

  textureMode(NORMAL);

float x=200,y=200,z=200,angle=180;

void keyPressed(){  //按方向鍵

   if(keyCode==LEFT) angle--; 

   if(keyCode==RIGHT) angle++;

   if(keyCode==UP){

     x+=cos(radians(angle));

     x+=sin(radians(angle));  //小心 是z(3D前後)不是y(3D上下)

   } 

   if(keyCode==DOWN){

     x-=cos(radians(angle));

     x-=sin(radians(angle));  //小心 是z(3D前後)不是y(3D上下)

   } 

}

void draw(){  //攝影機"往前方看" 左右、前後移動

  //camera(mouseX,200,mouseY,mouseX,200,mouseY-10,0,1,0); 

  if(keyPressed)keyPressed();  //補強一下讓按鍵按下去 會一直更新

  camera(x,y,z,x+cos(radians(angle)),y,z+sin(radians(angle)),0,1,0);

  background(128);  //灰背景 

  beginShape();  //front 正前方 z座標都放0

    texture(img);

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(400,0,0,1,0);

    vertex(400,400,0,1,1);

    vertex(0,400,0,0,1);

  endShape();

  beginShape();  //left 左方 x座標都放0

    texture(img);

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(0,400,0,1,0);

    vertex(0,400,400,1,1);

    vertex(0,0,400,0,1);

  endShape();

}




//week13_6_combine_all_Movie_Capture_PImage_camera_sin_cos_P3D

//把今天教的全部加進來

//street.mov及chessboard.png都拉進來

import processing.video.*;

Movie movie;

PImage img;

void setup(){

  size(400,400,P3D);

  movie=new Movie(this,"street.mov");  //720X480

  movie.loop();  //

  img=loadImage("chessboard.png");

  textureMode(NORMAL);

  video=new Capture(this,640,480);

  video.start();  //要記得"開始播放"

}

Capture video;  //有鏡頭在加他

void draw(){  //攝影機"往前方看" 左右、前後移動

  camera(200,200,200,200+cos(radians(frameCount)),200,200+sin(radians(frameCount)),0,1,0);

  background(128);

  if(movie.available()) movie.read();  //有畫面就讀入畫面

  beginShape();  //front 正前方 z座標都放0

    texture(img);

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(400,0,0,1,0);

    vertex(400,400,0,1,1);

    vertex(0,400,0,0,1);

  endShape();

  

  if(video.available()) video.read();  //有畫面就讀入畫面

  beginShape();  //左邊的牆放視訊畫面

    texture(video);  //把視訊 當成一面牆的貼圖

    vertex(0,0,0,0,0);  //x,y,z,u,v

    vertex(0,400,0,1,0);

    vertex(0,400,400,1,1);

    vertex(0,0,400,0,1);

  endShape();

}




沒有留言:

張貼留言