2011年1月2日 星期日

HW5

























在完成此作業的同時也學到了以下新函式的應用
針對以下函式作功能說明:

此次作業最主要的就是用到以下函式及include “glm.h”這個檔案,先利用 glm.cpp 準備display list ( list_id ), 然後應用 glCallList( list_id ) 把它畫出來。
構成一個完整的 OBJ 立體模型, 除了.obj檔,還需要.mtl檔和準備tga圖檔,而這個函式主要功能就是將做好的obj檔讀入並加以運用。

glCallList(list_id[1]);

glm_model[num_model++]= glmReadOBJ("model//blaze.obj");
glmUnitize( glm_model[0] );
list_id[1] = glmList( glm_model[0], GLM_MATERIAL | GLM_SMOOTH | GLM_TEXTURE);

因為尋找到能應用的obj太少,所以自己使用3Dmax作了幾個簡單的obj物件和貼圖(人物、場景和地板),然而因為初次使用3Dmax製作物件,雖然花了許多時間,但仍然沒辦法將物件做到很漂亮,只有很粗淺的模型。

場景表達意義:
左右兩個人分別是仇人,而被繩子綁在上方為此兩人共同的好朋友,在限時一分鐘內,雙方必須將刀鋸推向對方,否則時間結束,繩子將會自動切斷,而綁在上方的人會掉落在刀鋸上。

後記:
整理這學期所學到的繪圖方法
HW1:學會繪製圖形、上色及定位。
HW2:學會load ply檔。
HW3:學會物件的旋轉。
HW4:學會3D物件、場景的製作。
HW5:學會obj的製作及load,和物件的貼圖。
雖然不及同學做的有漂亮及細緻,但也確實的學到了許多繪圖的技巧及方法,讓物件完整的呈現在電腦上,而撰寫作業期間也碰到許多困難和問題,最後都一一解決,當中學到了做任事,一定要規劃,事先擬定好計劃,才不會到最後手忙腳亂,無法完成工作,也別因為小問題就放棄,堅持到最後仍然有成功的機會。
整學期的修課期間也去看了Pixar的當紅3D動畫片(Toy Story 3),除了故事內容精采,動畫的精美流暢及細緻度更是不知如何形容,也知道3D動畫的知識及技術,還有很多很多的東西要學。

2010年12月22日 星期三

HW4















在完成此作業的同時也學到了以下新函式的應用
針對以下函式作功能說明:

glPushMatrix()/glPopMatrix()
當做了一些移動或旋轉等變換後,使用glPushMatrix();
OpenGL 會把這個變換後的位置和角度保存起來。
然後再任意做第二次移動或旋轉變換,再用glPopMatrix();
OpenGL就把剛剛保存的那個位置和角度恢復。
比如:
glLoadIdentity();
glTranslatef(1,0,0);//向右移動(1,0,0)
glPushMatrix();//保存目前位置
glTranslatef(0,1,0);//現在是(1,1,0)
glPopMatrix();//如此又回到(1,0,0)

gluLookAt()
通過gluLookAt()函數完成視點變換,三組參數分別指定了相機的位置、瞄準方向的參考點和相機向上方向。gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
1、改變前三個參數的值可以模擬人在實際環境中的移動;
2、改變中間三個參數的值,可以模擬人眼的轉動,即所觀察場景的變化。
3、後三個參數的值比較特殊,它所制定的不是一個點,而是一個方向,即決定將哪一個坐標軸作為向上的方向,如果向上方向與觀察點到中心點的方向一致,結果將是不確定的。


對於此作業主要功能為
一.3D場景移動
二.配置物件於3D場景
動手實作後 感覺要完成一個3D場景相當的困難
所以完成場景後便兼顧不了整體畫面 使得表現相當單調
完成作業後才知道自己還需要很大的進步空間

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);
表示各種顏色使用一半,效果為灰色。

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

2010年10月30日 星期六

HW2

















定義:
ply主要結構為

element vertex 8 //定義"頂點"元素其數量為8個
property float32 x //
頂點的x屬性,其類型為float32
property float32 y
//頂點的y屬性,其類型為float32
property float32 z
//頂點的z屬性,其類型為float32
element face
6 //定義"面"元素,其數量為6個
property list uint8 int32 vertex_index

//面的頂點屬性,類型為uint8的列表

0 0 0 //頂點元素列表
0 0 1

4 0 1 2 3 //面元素列表
4 7 6 5 4

由以上ply定義
利用讀檔 讀取vertex和face的個數
再將vertex和face取出
以此完成Model

操作:
wsad:上下左右旋轉
按住滑鼠移動可旋轉

在此只實作到將模組讀出並利用鍵盤和滑鼠將圖案作旋轉功能
未完成打光,改變大小及更換模組實為可惜
然而第二次作業比第一次作業難上許多
且並未完美呈現作業功能
雖然如此但完成了作業仍然學到許多東西
此實為可貴之處

2010年10月9日 星期六

HW1




















完成了第一個圖學作業

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

以下七個新接觸的函式感覺相當重要,相信以後的作業也一定會再度使用,將之條列說明,以彙整完成此作業所學知識。


1.SolidCircle (float x,float y,float a,float b,int number)

畫出實心圓,float x,float yx軸、y軸之座標,float a,float b為橫半徑a 直半徑b, number是構成此圓的點數。


2.ColorRGB(GLfloat R,GLfloat G,GLfloat B)

GLfloat R為紅色色碼

GLfloat G為綠色色碼

GLfloat B為藍色色碼

範圍介於0-255 以三原色調和出其他顏色。


3.glFlush()

OpenGL中的函數,用强制刷新緩衝保證繪圖命令將被執行,而不是儲存緩衝區中等待其他的OpenGL命令


4.glutInitWindowSize(500,500)

設定視窗大小長寬為500x500


5.glutCreateWindow("Basic OpenGL Program Skeleton")

創造一個名為Basic OpenGL Program Skeleton的視窗。


6.glutDisplayFunc(display)

設置的顯示回調函數等介於WM_PAINT消息的響應函數,在該函數中繪製圖形。


7.glutMainLoop ()

就是所謂的訊息迴圈,反覆的接收視窗送來的訊息並且檢查是否是當初設定好的幾個預定的行為,如按鍵、畫面刷新、滑鼠訊息等...如果是的話就會呼叫當初指定的函數來處理。


完成此圖,其中較為繁雜及耗費時間之處為物件座標的調整及三色色碼的計算,座標必須做出精準的計算,以致整體圖形不會看似不協調;而色碼也是一再改變計算,以找出搭配適宜的顏色。


寓意月圓人團圓
始終分隔兩地的一對
在一年一次的中秋佳節團聚下 感情顯的更加深厚