2025年5月15日 星期四

晚安 week13

。視訊、投影、運鏡

1. 匯入函式庫,打開視訊鏡頭
Sketch - Library - Manage Libraries - Video Library for processing

//week13_01_video
//Sketch - Library - Manage Libraries - Video Library for processing
import processing.video.*; //匯入video函式庫
Capture video; //宣告視訊變數video
void setup(){
  size(640, 480);
  video = new Capture(this, 640, 480);
  video.start();//打開視訊
}
void draw(){
  video.read();
  image(video, 0, 0);
}
執行結果:







2.使用視訊檔mov

//week13_02_movie
//Sketch - Library - Manage Libraries - Video Library for processing
import processing.video.*; //匯入video函式庫
//Capture video; //宣告視訊變數video
Movie movie;
void setup(){
  size(640, 480);
  //video = new Capture(this, 640, 480);
  //video.start();//打開視訊
  movie = new Movie(this, "street.mov");
  movie.loop();
}
void draw(){
  //video.read();
  movie.read();
//  image(video, 0, 0);
  image(movie, 0, 0);
}
執行結果:








3.  camera攝影機

import processing.video.*;
Movie movie;
void setup(){
  size(720, 480, P3D);
  movie = new Movie(this, "street.mov");
  movie.loop();//循環播放
}
void draw(){
  background(128);
  camera(mouseX,mouseY,500,  360,240,0,  0,1,0);
  //camera(eyeX,eyeY,eyeZ,centerX,centerY,centerZ,upX,upY,upZ)
  
  if(movie.available()) movie.read();
  image(movie,0,0);
}
執行結果:







4.貼圖
//week13_03_texture_textureMode_NORMAL
PImage img;
void setup(){
  size(400,400,P3D);
  img = loadImage("chessboard.png"); //讀入圖檔
  textureMode(NORMAL);//貼圖模式
}
void draw(){
  background(128);
  beginShape();
  texture(img);
  vertex(40, 80, 0, 0);
  vertex(320, 20, 1, 0);
  vertex(380, 360, 1, 1);
  vertex(160, 380, 0, 1);
  endShape();
}
執行結果:









4.貼圖&攝影機搭建場景
//week13_04_camera_chessboard_texture
//將texture和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();
  
  beginShape();
  texture(img);
  vertex(400, 0, 0, 0, 0); //x, y, z, u, v
  vertex(400, 400, 0, 1, 0);
  vertex(400, 400, 400, 1, 1);
  vertex(400, 0, 400, 0, 1);
  endShape();
}
5.利用鍵盤事件控制攝影機
//week13_05_camera_chessboard_texture_keypressed
//將texture和camera整合
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(){
  //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();
  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();
  
  beginShape();
  texture(img);
  vertex(400, 0, 0, 0, 0); //x, y, z, u, v
  vertex(400, 400, 0, 1, 0);
  vertex(400, 400, 400, 1, 1);
  vertex(400, 0, 400, 0, 1);
  endShape();
}

執行結果:











6.整合一堆地13周所有程式碼...
//week13_06_
//整合第13周內容
import processing.video.*;
PImage img;
Movie movie;
Capture video;
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();
}
float x = 200, y = 200, z = 200, angle = 270;
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);
 if(movie.available())movie.read();
 beginShape(); //正前方的牆
 texture(img);
 vertex(  0,   0, 0, 0, 0);
 vertex(400,   0, 0, 1, 0);
 vertex(400, 400, 0, 1, 1);
 vertex(  0, 400, 0, 0, 1);
 endShape();
 image(movie, 0, 0, 360, 240);
 if(video.available())video.read();
 beginShape(); //左側的牆
 texture(video);
 vertex(0,   0,   0, 0, 0);
 vertex(0, 400,   0, 1, 0);
 vertex(0, 400, 400, 1, 1);
 vertex(0,   0, 400, 0, 1);
 endShape();
}

執行結果:

























沒有留言:

張貼留言