2012年6月11日 星期一

作業四 元智校園擬真3D空間場景

1.主題介紹:   元智校園擬真3D空間場景
2.內容:
設定光源
void prepare_lighting()
{
    GLfloat light0_ambient[4] = {0.5, 0.5, 0.5, 1.0};
    GLfloat light0_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
    GLfloat light_specular[4] = {1.0, 1.0, 1.0, 1.0};
    GLfloat light0_position[4] = {128.5, 150, -268, 1.0};
    GLfloat light1_position[4] = {0, 150, -292.5};
   
    GLfloat globel_ambient[] = {0.5, 0.5, 0.5, 0.0};
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, globel_ambient);

    //light0
    glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
}

//設定材質, 環境光跟漫射光設定的反射值相同
void set_mat(GLfloat r, GLfloat g, GLfloat b)
{
    GLfloat mat_ambient[4] = {r, g, b, 0.0};
    GLfloat mat_diffuse[4] = {r, g, b, 1.0};
    GLfloat mat_specular[4] = {1.0, 1.0, 1.0, 1.0};
   
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialf(GL_FRONT, GL_SHININESS, 25.0);
}


3.心得:
           透過這次的作業我充分的學會了如何讀取3D模組

     雖然在視點設定還有建築物設定上面一直遇到頗大的問題

    但最後還是能完成設定的部分,不過原本想要做出的碰撞偵測

     最後還是能夠穿越建築物,希望在最後的期末報告能夠完成的

     就是這個部分。

2012年5月21日 星期一

作業三 元智3D空間

1.主題介紹:   元智校景3D
2.內容:
             利用上一個作業以實做成功的GLULOOKAT的函式來導覽校園

       校景的部分則利用glutSolidCube畫出方塊來代替

  
 3.心得:
 
           這次的實作校景依然還在摸索如何使用更完善使用LOOKAT

      防撞機制則因未使用過後會造成行走時會產生極為怪異的行為

     所以在這次的作業之中就把它拿掉了,主要繳交作業實作的部分

     主要都為上一個作業的延伸程式碼,希望在下次的作業可以做出

     防撞的偵測機制且完成物體跟著一起移動的概念。

2012年4月30日 星期一

作業二 元智一館3D

1.主題介紹:元智一館3D
2.內容:
        利用老師今天上課所教的gluLookAt來實作讓使用者看建築物每個方位的函式
        然後利用glutSolidCube來實作一館
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  gluLookAt(p1.xpos, p1.ypos, p1.zpos, p1.xpos-(float)sin(p1.heading*piover180)*10.0,
     p1.ypos, p1.zpos-(float)cos(p1.heading*piover180)*10.0, 0.0, 1.0, 0.0);
 //地板
  glPushMatrix();
  glTranslatef(-50.0f, -1.0f, 50.0f);
  glScalef(100,0,100);
  glColor3f(0.5,0.5,0.5);
  glBegin(GL_POLYGON);
    glVertex3f(0,0,0);
    glVertex3f(1,0,0);
    glVertex3f(1,0,-1);
    glVertex3f(0,0,-1);
  glEnd();
  glPopMatrix();
 //一館
  glPushMatrix();
  glTranslatef(-15.0, 0.0f, 10.0f);
  glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
  glColor3f(0.7,0.7,0.7);
  glScalef(2.0f,  0.5f, 0.5f);
  glutSolidCube(10);
  glPopMatrix();
 
  glutSwapBuffers();


3.心得:
       因為還沒有研究出如何在glutSolidCube產生出的立方體上做修改
     所以做出來的一館十分粗糙,瀏覽一館的部分則是利用老師今天上
    課所教的gluLookAt來設定看的人,然後可以做瀏覽的動作,希望可
    以在下次做元智全地圖的時候完成更精細地圖物件的動作。


2012年3月19日 星期一

作業一 元智一館

1.主題介紹:    白天與一館
               
                  我所畫的是平常上課時就看得到的一館!

2.過程與成果展示:


   glBegin(GL_POLYGON);
      glColor3f(0.0,1,1);
      glVertex3f(-1, -1, 0.0);
      glVertex3f( 1, -1, 0.0);
      glVertex3f( 1,  1, 0.0);
      glVertex3f(-1,  1, 0.0);
    glEnd(); 


    主結構體的部分就是利用畫四邊形的函式來製作完成

     glColor是用來設定四邊形內的顏色

     glVertex四個則是用來設定四個頂點

    glBegin(GL_POLYGON);
      glColor3f(1, 1, 1);

      for ( i = 0; i < 100; i++)
      {
        angle1=2*3.14159*i/100;
        glVertex2f( 0.45+cos(angle1)/9, 0.8+sin(angle1)/9 );
      }
    glEnd(); 



    畫圓主要是用來畫太陽和雲的部分

    利用for迴圈的方式利用glVertex函式與之前所學的數學三角函數的觀念畫出圓

    然後雲的部分則是使用九個圓來製作出不規則的圓弧展現出雲的多變!




 
3.心得:


        在撰寫這次的練習後

        比較大的困難就是做雲的部分

        可能是因為還不熟悉OPENGL的原因

         所以我只能用利用畫九個圓的方式來製作出不規則圓弧的效果

         其他部分大概都是相近的圖型設定參數而已

          看過其他同學的作品真的很厲害

           我還有很多學習的地方!!