2015年10月12日 星期一

02160473賴緯漢_2015互動技術概論 week5

今天WEEK5的練習

1.課堂程式範例
先去Import Library下載範例
 然後再去Examples尋找
OBJLoader_Sample_SAITO按下
開啟範例













程式碼:
import saito.objloader.*;

OBJModel model ;

float rotX, rotY;

void setup()
{
    size(800, 600, P3D);
    frameRate(30);
    model = new OBJModel(this, "dma.obj", "absolute", TRIANGLES);
    model.enableDebug();

    model.scale(20);
    model.translateToCenter();

    stroke(255);
    noStroke();
}



void draw()
{
    background(129);
    lights();
    pushMatrix();
    translate(width/2, height/2, 0);
    rotateX(rotY);
    rotateY(rotX);

    model.draw();

    popMatrix();
}

boolean bTexture = true;
boolean bStroke = false;

void keyPressed()
{
    if(key == 't') {
        if(!bTexture) {
            model.enableTexture();
            bTexture = true;
        }
        else {
            model.disableTexture();
            bTexture = false;
        }
    }

    if(key == 's') {
        if(!bStroke) {
            stroke(255);
            bStroke = true;
        }
        else {
            noStroke();
            bStroke = false;
        }
    }

    else if(key=='1')
        model.shapeMode(POINTS);
    else if(key=='2')
        model.shapeMode(LINES);
    else if(key=='3')
        model.shapeMode(TRIANGLES);
}

void mouseDragged()
{
    rotX += (mouseX - pmouseX) * 0.01;
    rotY -= (mouseY - pmouseY) * 0.01;
}


2.抄襲範例
   先把程式打進去,把範例Scatch內data中的所有東西拉近新打的














不會旋轉的3D模型













程式碼:
import saito.objloader.*;

OBJModel model;

void setup()
{
  size(800, 600, P3D);//視窗大小
  model = new OBJModel(this,"dma.obj","absolute", TRIANGLES);//讀obj model檔
  model.scale(20);//模型大小
  model.translateToCenter();
}

void draw()
{
  translate(width/2,height/2);//移動
  model.draw();
}

3.做出doodle jump
   先下載一png檔
   拉入程式框中
   然後輸入圖片進入程式中
   在輸出進畫面中
   點滑鼠會跳起














程式碼:
PImage imgPerry;

void setup()
{
  size(800,600);
  imgPerry = loadImage("perry.png");
}
float perryX=400,perryY=0,perryVY=0;

void draw()
{
  background(225);
  image(imgPerry,perryX,perryY,100,50);//圖片位置和大小

  perryY+=perryVY;
  perryVY+=0.98;//加速度
}

void mousePressed()
{
  perryVY = -25;//跳起
}

perry能夠在Y軸的某一數值停住(若Y<450則繼續向下掉,Y>=450則加速度為0)














程式碼:
PImage imgPerry;

void setup()
{
  size(800,600);
  imgPerry = loadImage("perry.png");
}
float perryX=400,perryY=0,perryVY=0;

void draw()
{
  background(225);
  image(imgPerry,perryX,perryY,100,50);

  perryY+=perryVY;
  if(perryY<450)//若Y<450則加速度為0.98
    perryVY+=0.98;
  else//否則加速度為0
    perryVY=0;
}

void mousePressed()
{
  perryVY = -25;
}
void mouseMoved()
{
  perryX = mouseX;//若滑鼠X座標移動,則perry也跟著X座標移動
}


畫出地板
不過站不上去














程式碼:
PImage imgPerry;
PVector [] board = new PVector[10];

void setup()
{
  size(800,600);
  imgPerry = loadImage("perry.png");
  for(int i=0;i<10;i++)
  {
    board[i] = new PVector(random(800),i*60);
  }
}
float perryX=400,perryY=0,perryVY=0;

void draw()
{
  background(225);
  for(int i=0;i<10;i++)
  {
    rect(board[i].x,board[i].y,100,20);
  }
  image(imgPerry,perryX,perryY,100,50);

  perryY+=perryVY;
  if(perryY<450)
    perryVY+=0.98;
  else
    perryVY=0;
}

void mousePressed()
{
  perryVY = -25;
}
void mouseMoved()
{
  perryX = mouseX;
}

判斷perry和地板
(程式碼有錯)














老師範例

沒有留言:

張貼留言