2008年12月28日 星期日

3D場景


這次的作業算是整合上課學過的所有功能
包括光源,攝影機移動
我做出來的成品有光源的移動及xz平面的攝影機平移
目前希望能夠寫出以攝影機為中心旋轉xyz三個方向的360度功能
不過因為要使用sin&cos
數學方面我不是很強所以還在計算中

以下是部分code

gluLookAt(eye_x, eye_y, eye_z,at_x, at_y, at_z,0,1,0 );
case 'd': // 攝影機左平移
eye_x += 0.01;
at_x += 0.01;
glutPostRedisplay();
break;
這是攝影機平移功能的部分code

GLfloat LightAmbient[]= { 0.4f, 0.4f, 0.35f, 1.0f };
GLfloat LightDiffuse[]= { 8.8f, 8.8f, 8.8f, 1.0f };
GLfloat LightSpecular[]= { 0.5f, 0.5f, 0.5f, 0.5f };
GLfloat LightPosition[]= { 5.0f, 0.0f, 7.0f, 1.0f };

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // Setup The Ambient Light
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // Setup The Diffuse Light
glLightfv(GL_LIGHT1, GL_SPECULAR,LightSpecular); // Setup The Specular Light
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // Position The Light
glEnable(GL_LIGHT1); // Enable Light One
這是光源的部分code

GLMmodel *glm_model;

glm_model= glmReadOBJ( "object/area.obj" );
glmUnitize( glm_model );
glmScale( glm_model, .1 );
glmFacetNormals( glm_model );
glmVertexNormals( glm_model, 90 );
list_id = glmList( glm_model, GLM_MATERIAL | GLM_SMOOTH );
glmDelete( glm_model );
這是嵌入obj的部分code

2008年11月24日 星期一

HW2-Solar system


這次的作業一開始沒什麼頭緒
只知道用glutWireSphere(, , )來畫圓
不過碰到的最大難題是沒辦法把每個星球獨立出來
使他們擁有各自的運轉時間

之後請教同學
得知可以使用glPushMatrix(); & glPopMatrix();
把每個星球設定為獨立的個體
如此一來整個工作就變得簡單了
每顆星球的制式化製作都是
1.成型
2.對球體做旋轉, 因為一開始軸心為x軸, 把他轉成y軸使得整個solar system可以是水平轉而不是垂直
3.設定期與太陽的距離(太陽為中心點)
4.設定自轉公轉的半徑與周期
5.上色

2008年10月2日 星期四

HW1-Cartoon

這是我這次作業要畫的卡通人物
至於畫的方式我是用矩形 三角形 跟橢圓完成的
以下是拼貼過程

  1. 建置背景製造3D錯覺(咦!?)
    glClearColor是預設的黑色
    所以左右上方是用倒三角形畫的
    中間的扇形是用三角形+橢圓
    然後再放上一個黑橢圓當影子
  2. 身體部分
    身體是由兩個籃橢圓所組合而成
  3. 嘴巴
    嘴巴也是兩個橢圓組合
    一個藍色一個紅色
    紅色被藍色的部分蓋住
  4. 眼睛
    一個眼睛由一白圓+一黑圓所組成
  5. 頭部修飾(雖然也分不清楚他的頭跟身體怎麼區隔)
    用兩個白色圓形覆蓋