1.下載課本的範例 https://jsyeh.org/3dcg10/ 👉 [data][win32]
(1) 將windows.zip解壓縮,並將data.zip的data拉到windows資料夾
(2) 執行Sapes.exe
2. 寫程式,試試看點線面色彩
step1; 下載 freeglut-MinGW-3.0.0-1.mp.zip
step2: 進到資料夾,把檔案 freeglut 拉到桌面
step3: 點進 freeglut 👉 lib 資料夾
step4: 複製 libfreeglut.a 並且改名為libglut32.a
step5: 開啟code blocks
step6: 選擇File 👉 new 👉 project 👉 GLUT 👉 專案名稱: week02_glut_color_teapot 👉路徑選擇:桌面-freeglut 👉 執行
(Build and Run)
step7: 執行時會跳出上週的程式,接著改寫程式!!
左邊的Sources的main.cpp點開,再把上週的10行程式碼貼上
step8: 修改第15行的檔案名稱 week02_glut_color_teapot ,第5行加上 glColor3f 的程式
step9: 可修改glColor3f的數值,變成不同的顏色
3. 要設定色彩,老師利用學長姐畫的阿尼亞作範例
(0,1,0) 綠色、(1,0,0) 紅色、(0,0,1) 藍色、(1,1,0) 黃色
step1: 若是要改變顏色,可利用小畫家的滴管知道顏色的RGB,再將數值放到 glColor3f 裡,將數值除以255.0,小數點不可省略。
step2: 再製作一個小茶壺在大茶壺裡面,兩個不同的茶壺,用不同的顏色,畫出兩色的效 果
4. 畫出三角形
step1: 開新的GLUT專案,專案名稱week02_glut_triangle
step2: 將week02_glut_color_teapot的程式碼貼上
step3: 刪掉5~9行
step4: 加上GL_POLYGON的程式,畫出一個三角形,顏色有三種顏色
註1: 頂點 👉glBegin(GL_POLYGON);
👉glColor3f(r,g,b);
👉glVertex2f(x,y);
👉glEnd();
註2: 以上是期中考試的10題其中的3題,佔30分。
在真的實作時,會有很多組 glColor3f(r,g,b) ; 以及glVertex2f(x,y) ;
5. 用小畫家,幫我們找到 "任意形狀" 的頂點座標 (範例取自阿尼亞的圖片)
step1: 開啟小畫家,把圖片放上去
step2: 小畫家的座標裡,左上角是 (0,0),右下角是 (400,400) (假設圖片寬度400、 高度400)
註: 座標 OpenGL 預設是 "正中間0,0" 右邊是+1,左邊是-1,上面是+1,下面是-1。
step3: 假設圖片寬度400、高度400
👉把小畫家的 (x座標-中心點200)/200.0,-(y座標-中心點200)/200.0 變成
OpenGL的座標
註: 口訣 👉減一半、除一半,在加正負號
step4: 開新的GLUT專案,專案名稱week02_glut_mspaint_help_draw
6. 用三角函數畫圓
step1: 開新的GLUT專案,專案名稱week02_glut_circle_cos_sin
step2: 改寫 display 第5行再 include 數學函式
display 👉 for(float a=0; a<=3.14*2; a+=0.1){
glVertex2f( r*cos(a)+cx, r*sin(a)+cy );
}///三角函數超好用,x=cos(a), y=sin(a)
include 👉 #include <math.h>
註1: X 👉 cos(a) 乘上某數可調整圓上下距離的大小,加某數,可在X軸位移
Y 👉 sin(a) 乘上某數可調整圓左右距離的大小,加某數,可在Y軸位移
a 👉 角度
7. 用三角函數畫米老鼠
step1: 同個的GLUT專案,專案名稱week02_glut_circle_cos_sin
step2: 修改程式碼,圓的公式用另外的函式寫,將要畫的座標寫在display
void myCircle 👉 void myCircle(float cx, float cy, float r)
{
glBegin(GL_POLYGON);
for(float a=0; a<=3.14*2; a+=0.1){
glVertex2f( r*cos(a)+cx, r*sin(a)+cy );
}///三角函數超好用,x=cos(a), y=sin(a)
glEnd();
}
void display 👉 glColor3f(1,1,1); myCircle(0,0,1);
glColor3f(0,0,0); myCircle(-0.5, 0.5, 0.3);
glColor3f(0,0,0); myCircle(0.5, 0.5, 0.3);
glColor3f(0,0,0); myCircle(0, -0.3, 0.7);
glutSwapBuffers();
沒有留言:
張貼留言