2025年5月15日 星期四

week13(12750370顧家寶)

 week13-1

// week13_1_processing_video

// Sketch - Library - Manage-Libraries-video Library

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

import processing.video.*; 

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

// week13_2_camera_movie_eye_center_up

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

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

void setup(){

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

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

  movie.loop(); // 迴圈播放影片解析度720x480

}

void draw(){

  background(128);

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

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

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

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

}

week13-3

// week13_3_texture_textureMode_beginShape_vertex_endShape

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

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

PImage img;

void setup() {

  size(400, 400, P3D); // 要加 P3D 才有 OpenGL 3D 功能

  img = loadImage("chessboard.png");

  textureMode(NORMAL);

}

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

// 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

// week13_5_camera_keyPressed_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));

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

  }

  if(keyCode==DOWN) {

    x -= cos(radians(angle));

    z -= sin(radians(angle));

  }

}

void draw(){

  if(keyPressed) keyPressed();

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

  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

// week13_6_combine_all_Movie_Capture_PImage_camera_sin_cos_P3D

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

import processing.video.*;

Movie movie; //再把 Capture 視訊鏡頭加進來

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(); // 正前方的牆

    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); // 放影片, 用 2D 的放圖的方法

  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();

}




沒有留言:

張貼留言