2018年1月11日 星期四
2017年12月14日 星期四
柴宇恆 week14
使用P語言畫圖
size(600,600,P3D);
background(255);
beginShape(TRIANGLE);
stroke(255,0,0);vertex(300,100);
stroke(255,255,0);vertex(500,500);
stroke(0,0,255);vertex(100,500);
endShape();
(如果把上面的stroke改成fill 可以把圖型塗滿)
要注意的是點座標後面的Z值,他會影響到圖形的先後順序
size(600,600,P3D);
background(255);
beginShape(TRIANGLE);
stroke(255,0,0);vertex(300,100);
stroke(255,255,0);vertex(500,500);
stroke(0,0,255);vertex(100,500);
endShape();
(如果把上面的stroke改成fill 可以把圖型塗滿)
要注意的是點座標後面的Z值,他會影響到圖形的先後順序
2017年12月7日 星期四
week13 柴
顏色的練習
size(255,255);
colorMode(RGB,255);
for(int x=0;x<255;x++)
{for(int y=0;y<255;y++)
{stroke(x,y,x); (三個參數分別代表RGB)
point(x,y);
}
}
size(255,255);
colorMode(RGB,255);
for(int x=0;x<255;x++)
{for(int y=0;y<255;y++)
{stroke(x,y,x); (三個參數分別代表RGB)
point(x,y);
}
}
2017年11月30日 星期四
柴宇恆 week12
一開始先介紹OPENGL 和UNITE的差異
後者是個方便使用的軟體,他可以一行就完成C++幾十行的程式碼功能
但是因為它的功能太強大,減少了使用者解決問題的能力,真正有能力的人,還是會用OPENGL即使要寫比較大量的程式碼,也會遇到比較多問題,但是當克服這些困難後才能大大進步,所以比起直接使用好用的工具,還不如自己去DEMO程式,找出自己問題點,才能真正了解程式內部的操作。
開啟老師的檔案。
執行P語言,下載Collada 並在範例程式中打開view2D 並將裡面一行的程式碼凱true就可以依照不同按鍵執行不同效果
接下來是下載Picking
然後打開範例程式
但是可能系統不支援,所以無法成功執行。
後者是個方便使用的軟體,他可以一行就完成C++幾十行的程式碼功能
但是因為它的功能太強大,減少了使用者解決問題的能力,真正有能力的人,還是會用OPENGL即使要寫比較大量的程式碼,也會遇到比較多問題,但是當克服這些困難後才能大大進步,所以比起直接使用好用的工具,還不如自己去DEMO程式,找出自己問題點,才能真正了解程式內部的操作。
開啟老師的檔案。
執行P語言,下載Collada 並在範例程式中打開view2D 並將裡面一行的程式碼凱true就可以依照不同按鍵執行不同效果
接下來是下載Picking
然後打開範例程式
但是可能系統不支援,所以無法成功執行。
2017年11月23日 星期四
柴宇恆 week11
想要在程式中加入音效,要先 #include <mmsystem.h>
然後再 main裡面多加一行 PlaySoundA("chaha.wav",NULL,SND_ASYNC);
雙引號裡面試放檔案的名字 ,最後一個參數 有兩種第一種是ASYNC 這會讓聲音和後面的程式一起出現,另一種是SYNC是先放聲音,再執行後面的程式
先下載CMP3_MCI.h檔並放到資料夾內
接著程式碼使用play的函示即可播放
接下來使用process 寫播放音樂的程式
先打開並去 速寫本->引用庫文件下載minim
然後再 main裡面多加一行 PlaySoundA("chaha.wav",NULL,SND_ASYNC);
雙引號裡面試放檔案的名字 ,最後一個參數 有兩種第一種是ASYNC 這會讓聲音和後面的程式一起出現,另一種是SYNC是先放聲音,再執行後面的程式
要把從網路上下載的音樂檔存到 freeglut的bin資料夾裡面。
利用mp3檔播放音樂
接著程式碼使用play的函示即可播放
接下來使用process 寫播放音樂的程式
先打開並去 速寫本->引用庫文件下載minim
程式碼:
import ddf.minim.*;
Minim minim;//int a;
AudioPlayer player;
void setup(){
minim = new Minim(this);
player = minim.loadFile("file.mp3");
player.loop();
player.play();
}
void draw(){
}
2017年11月9日 星期四
柴宇恆 week09
Bump mapping 就是凹凹凸凸的貼圖
範例程式如下:
解壓所process.zip檔
自製圖檔程式碼 只要三行就能開啟一個圖檔
PImage img=loadImage("fun.png"); (製作一個圖檔)
size(600,600); (視窗大小)
image(img,0,0,600,600); (開啟圖檔 前兩碼數字代表開始位置,後兩碼指大小)
如果把 image的位置做改成 mouseX mouseY 可以使物體跟著滑鼠跑
int [][]map={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
PImage imgMario, imgBrick;
void setup(){
size(800,600);
imgMario=loadImage("mario.png");
imgBrick=loadImage("brick.png");
}
float marioX=200,marioY=100,marioVY=0,marioVX=0;
boolean marioOnFloor=false;
void draw(){
background(255);
for(int x=0;x<16;x++){
for(int y=0;y<11;y++){
if(map[y][x]==1) image(imgBrick,x*50,y*50,50,50);
}
}
image(imgMario,marioX,marioY,100,100);
marioY+=marioVY; marioX+=marioVX;
marioVY +=0.98;
if(marioY>=500-80) {marioY=500-80;marioVY=0;marioOnFloor=true;}
}
void keyPressed(){
if(keyCode==UP && marioOnFloor){marioVY=-15;marioOnFloor=false;}
if(keyCode==RIGHT) marioVX=5;
if(keyCode==LEFT) marioVX=-5;
}
void keyReleased(){
if(keyCode==RIGHT || keyCode==LEFT) marioVX=0;
}
範例程式如下:
解壓所process.zip檔
自製圖檔程式碼 只要三行就能開啟一個圖檔
PImage img=loadImage("fun.png"); (製作一個圖檔)
size(600,600); (視窗大小)
image(img,0,0,600,600); (開啟圖檔 前兩碼數字代表開始位置,後兩碼指大小)
如果把 image的位置做改成 mouseX mouseY 可以使物體跟著滑鼠跑
int [][]map={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
PImage imgMario, imgBrick;
void setup(){
size(800,600);
imgMario=loadImage("mario.png");
imgBrick=loadImage("brick.png");
}
float marioX=200,marioY=100,marioVY=0,marioVX=0;
boolean marioOnFloor=false;
void draw(){
background(255);
for(int x=0;x<16;x++){
for(int y=0;y<11;y++){
if(map[y][x]==1) image(imgBrick,x*50,y*50,50,50);
}
}
image(imgMario,marioX,marioY,100,100);
marioY+=marioVY; marioX+=marioVX;
marioVY +=0.98;
if(marioY>=500-80) {marioY=500-80;marioVY=0;marioOnFloor=true;}
}
void keyPressed(){
if(keyCode==UP && marioOnFloor){marioVY=-15;marioOnFloor=false;}
if(keyCode==RIGHT) marioVX=5;
if(keyCode==LEFT) marioVX=-5;
}
void keyReleased(){
if(keyCode==RIGHT || keyCode==LEFT) marioVX=0;
}
2017年11月2日 星期四
柴宇恆 week08
第一步 到 jsyeh.org/3dcg10
下載 data.zip windows.zip glut32.dll 到 windows資料夾內
上MOODLE 下載 opencv-2.1.0-win32-vs2008.exe
打開codeblocks
linker 需要的檔案在lib裡面
接下來在linker setting裡面把需要的三個檔案加進去 (cv21、cxcore210、highgui210)
下載 data.zip windows.zip glut32.dll 到 windows資料夾內
上MOODLE 下載 opencv-2.1.0-win32-vs2008.exe
打開codeblocks
開起專案黨
輸入程式碼
IplImage * img=cvLoadImage("earth.jpg");
cvNamedWindow("hello");
cvShowImage("hello",img);
cvWaitKey(0);
這時候還是無法執行,必須要用下列步驟
compiler 需要的檔案在include裡面linker 需要的檔案在lib裡面
接下來在linker setting裡面把需要的三個檔案加進去 (cv21、cxcore210、highgui210)
改變完這些設定後即可執行
這樣就可以打開圖檔
如何開啟兩個檔案
這四行程式碼是關鍵
除了這些程式碼外,還必須把原始圖檔放到 freeglut的bin裡面
依上面步驟即可開啟兩個檔案
把2D地圖變成球體轉動
這邊的步驟很難很複雜,所以直接下載老師的檔案
2017年10月26日 星期四
柴宇恆 week07
最上方的那一行
GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
是改變光的位置 ,分別是光往左右,上下,以及前後
接下來要試著用滑鼠讓光源可以自己隨意操控
void motion(int x,int y)
{
light_position[0]=(x-150)/150.0*2; 改變X座標
light_position[1]=-(y-150)/150.0*2; 改變Y座標
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 打光用
glutPostRedisplay();隨時改變畫面
}
光源在左上
GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
是改變光的位置 ,分別是光往左右,上下,以及前後
接下來要試著用滑鼠讓光源可以自己隨意操控
void motion(int x,int y)
{
light_position[0]=(x-150)/150.0*2; 改變X座標
light_position[1]=-(y-150)/150.0*2; 改變Y座標
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 打光用
glutPostRedisplay();隨時改變畫面
}
光源在左上
光源在右下
2017年10月19日 星期四
柴宇恆 week06
今日進度: 打光
第一步 先下載上禮拜的week05.zip
載完後 再到老師的網站 (jsyeh.org/3dcg10) 去下載source.zip
並參考transformation.c
並將裡面一些有價值的程式碼拿來使用
要在main的上方打 GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 }; 表示打光的位置
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_DEPTH_TEST); 如果沒有這行,圖形會壞掉,無法表現出不同的深度
執行後的結果
接下來是加入 滑鼠與鍵盤的功能
試著用鍵盤讓圖轉動
利用前幾周所學的glrotated 函式
使用glutPostRedisplay 可以讓圖每次輸入後立即轉動
接下來是用滑鼠讓圖片轉動
必須加入 mouse 和 motion 的function
這樣就可以讓圖跟著滑鼠轉動
第一步 先下載上禮拜的week05.zip
載完後 再到老師的網站 (jsyeh.org/3dcg10) 去下載source.zip
並參考transformation.c
並將裡面一些有價值的程式碼拿來使用
要在main的上方打 GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 }; 表示打光的位置
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_DEPTH_TEST); 如果沒有這行,圖形會壞掉,無法表現出不同的深度
執行後的結果
接下來是加入 滑鼠與鍵盤的功能
試著用鍵盤讓圖轉動
利用前幾周所學的glrotated 函式
使用glutPostRedisplay 可以讓圖每次輸入後立即轉動
接下來是用滑鼠讓圖片轉動
必須加入 mouse 和 motion 的function
這樣就可以讓圖跟著滑鼠轉動
2017年10月12日 星期四
柴宇恆 week05
第一堂課
第一步 : 下載jsyeh.org/3dcg10 裡面的 data window glut32.dll
第一步 : 下載jsyeh.org/3dcg10 裡面的 data window glut32.dll
第二步 : 把他們都解壓縮到windows的資料夾
第三步 : 點transformation執行即可操作
中間的每個參數都可以滑鼠調整
第四步 : 點projection執行即可操作
裡面的參數也可以用滑鼠調整
訂閱:
文章 (Atom)


















































