2025年5月15日 星期四

12750094_week13

 //week13_1_processing_video

//Sketch - Libarary - Manage Libararies
import processing.video.*;//Jave 使用外掛的匯入
//有視訊鏡頭
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);//影片解析度 720*480
  movie = new Movie(this, "street.mov");
  movie.loop();
}
void draw()
{
  background(127);
  //eyeX,eyeY,eyeZ,centerX,centerY,centerZ,upX,upY,upZ
  camera(mouseX, mouseY, 500, 360, 240, 0, 0, 1, 0);
  //把影片中心當主角
  if (movie.available())movie.read();
  image(movie, 0, 0);
}
   
//week13_3_texture_textureMode_beginShape_vertex_endShape
//把貼圖加進去
PImage img;  
void setup()
{
  size(400, 400, P3D);
  img = loadImage("chessboard.png");
  textureMode(NORMAL);
}
//1.用最簡單的NORMAL畫 2個三角形 不像3D透視效果
void draw()
{
  background(128);
  beginShape();
  texture(img);
  vertex(40, 80, 0, 0);//4個頂點
  vertex(320, 20, 1, 0);
  vertex(380, 360, 1, 1);
  vertex(160, 380, 0, 1);
  endShape();
}

//week13_4_camera_chessboard_texturefront_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();//正前方
  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();//左方
  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();
}

//13_5_camera)ekyPressed_ceyCode_x_y_z_angle_cos_sin
//利用方向鍵移動主角
//修改自week13_4_camera_chessboard_texturefront_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));
    z+=sin(radians(angle));
  }
  if(keyCode==DOWN)
   {
    x-=cos(radians(angle));
    z-=sin(radians(angle));
  }
}
void draw()//攝影機往前方看,左右、前後移動
{
  if(keyPressed)keyPressed();//按下後會持續更新
  camera(x,y, z,x+cos(radians(angle)), y, z+sin(radians(angle)), 0, 1, 0);
  background(128);
  beginShape();//正前方
  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();//左方
  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_Movue_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");
  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();//正前方的牆
    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();
  translate(0,0,1);
  image(movie,0,0,360,240);
  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();
}

會不停旋轉
顯示街道影片與視訊鏡頭畫面





















沒有留言:

張貼留言