2010年11月29日 星期一

HW3



















在完成此作業的同時也學到了以下新函式的應用

針對部份函式作功能說明:

1.glRotatef
//程式片段
GLfloat anglez_water=0.0;//水星
glRotatef(anglez_water, 0.0, 1.0, 0.0);
anglez_water=anglez_water+4;//水星
if (anglez_water >= 360.0)
anglez_water = 0.0;
程式中angle為球體旋轉的角度,而x,y,z三個參數則看成一個整體表示一個向量,表示物體圍繞向量[x,y,z]旋轉。
對於glRotatef()函數定義為--x,y,z中僅一個不為0;(如y不為0)若y>0,則表示繞向量y軸正方向旋轉angle度,若 y<0,則表示繞向量y軸負方向旋轉angle度,不論x的值是多大,即1.0和0.1代表的都是繞向量y軸正方向旋轉angle度。其餘x、z為 0就表示繞該軸不旋轉。


2.gluPerspective
函式原型--gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
fovy(將之視為眼睛睁開的角度,即視角的大小) 如果設置為0,相當你閉上眼睛,所以什麼也看不到;如果為180,則可以視為視野廣闊。
aspect 即為實際視窗的縱橫比,即x/y。
zNear 表示近處的裁面。
zFar 表示遠處的裁面。


3.glColor3f
函式原型--glColor3f(GLfloat red, GLfloat green, GLfloat blue);
glColor*系列函數用於設置顏色,其中三個參數的版本可以指定R、G、B的值,而A值採用默認;四個參數的版本可以分别指定R、G、B、A的值。
glColor3f(1.0f, 0.0f, 0.0f);
表示不使用綠、藍色,而將紅色使用最多,於是得到最純淨的紅色。
glColor3f(0.0f, 1.0f, 1.0f);
表示使用綠、藍色到最多,而不使用紅色。混合的效果就是淺藍色。
glColor3f(0.5f, 0.5f, 0.5f);
表示各種顏色使用一半,效果為灰色。

對於此作業主要功能為
一.繪製球體
二.打光上色
三.球體圍繞並自轉公轉
與前兩個作業相比因為又接觸了許多新的東西
所以並不是相當熟練輕鬆的撰寫此程式
花了許多時間找了相關函式和參考資料 才慢慢組合出一個雛形
整體來看雖然不是很完美
但是在找資料的過程中 確實又多學到了許多新的函式資料