2019年4月11日 星期四

week06

網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
(1)到上面網址下載:data 、win32 glut.32dll source
重複之前的步驟:解壓縮windows.zip->拉data進windows ->複製glut32.dll ->貼上


(2)開啟source壓縮檔 將glm.c  glm.h lightmaterial.c三個拉出


(3)重複以前的步驟:搜尋freeglut->下載->解壓縮拖移到桌面->複製改檔名(libglut32.a)->
                                開啟codeblock新建一個新的GLUT project
(4)將上週的茶壺打光程式碼複製貼上
(5)用NotePad++開啟lightmaterial.c       


(6)ctrl+f可以搜尋關鍵字
    搜尋glm複製搜尋到的前三筆程式碼:



(7)複製到codeblock上


(8)將glm.c  glm.h拖移到剛剛codeblock新建的glut procject資料夾裡


(9)將glm.c的檔名改成glm.cpp

.
(10)右鍵新增files

(11)加入glm.cpp進去

(12)將下載的data放到ferrglut >bin裡面


(13)執行
 出現有光照的圖

#include <GL/glut.h> #include "glm.h" ///我們要讀入3D模型 第一步,使用GLM,glm.h要放在同一目錄裡 GLMmodel* pmodel = NULL; ///我們要讀入3D模型 第二步, GLMmode1 變數,等一下要讀入的3D模型 const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f }; const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f }; float angle=0; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清畫面 if (!pmodel) { ///我們要讀入的3D模型 第三步,讀入3D模型 pmodel = glmReadOBJ("data/AL.obj"); ///我們要讀入的3D模型 第三步,讀入3D模型 if (!pmodel) exit(0); ///我們要讀入的3D模型 第三步,讀入3D模型 glmUnitize(pmodel); ///我們要讀入的3D模型 第三步,讀入3D模型 glmFacetNormals(pmodel); ///我們要讀入的3D模型 第三步,讀入3D模型 glmVertexNormals(pmodel, 90.0); ///我們要讀入的3D模型 第三步,讀入3D模型 } glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL); ///我們要讀入的3D模型 第三步,讀入3D模型 glutSwapBuffers(); } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("06160052"); ///顯示一個視窗 glutDisplayFunc(display); glutIdleFunc(display); glClearColor(1,0,0,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glutMainLoop(); }

作業:(將maya的模型匯入codeblock)

(1)匯出obj檔:File->Export Selection
(2)選擇OBJ export

(3)將匯出的檔案拉近freeglut>bin裡面
(4)將圈起來的地方改成自己剛剛儲存的檔名



2019年4月10日 星期三

week01

Week01:

測試環境是否能使用


到Web GL Water
http://madebyevan.com/webgl-water/測試球能不能移動,若能浮起就代表成功


 
 
開啟codeblocks點選Open GLUT project
 
圈起來的地方點選桌面
 
圈起來的地方選取下載好放在桌面的freeglut
 
這樣就代表完成可以開啟程式碼了
 
 
 
 
 
 
 

week02

week02:

點線面

 
到老師的網址http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載windows data glut.dll,然後將windows解壓縮,並且將data的資料夾放進windows裡面
 


然後到網站打freeglut windows下載freeglut到桌面
 
點開windows資料夾裡面的Shape就能開啟調整點線面的畫面
 

week03

 
 

week03:

Translate(移動) Rotate(旋轉)以及Scale(放大縮小)

 
到老師的網址http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載windows data glut.dll,然後將windows解壓縮,並且將data的資料夾放進windows裡面
 

然後到網站打freeglut windows下載freeglut到桌面
 
接著到windows資料夾裡就能打開Transformation看到一台保時捷能調整Translate(移動) Rotate(旋轉)以及Scale(放大縮小)
 
接著打開codeblock,然後把原本的程式碼刪光光,並且自己打下列的程式碼上去

 

呼叫茶壺的程式碼

#include <GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03 translate");
    glutDisplayFunc(display);
    glutMainLoop();
}


2019年4月1日 星期一

week05

week05

主題 : GLUT程式(Light & Material)



(1)到 這裡data、win32、gult32.dll 下載並解壓縮
(同 week02 一、使用freeglut簡化程式)











(2)打開 Light Material.exe



GLfloat light_pos[ ]={左右 , 上下 , 前後 , 遠近}












一、旋轉茶壺


(以下為程式碼)

#include <GL/glut.h>

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

float angle=0;///+++

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///+++
        glRotatef(angle,0,1,0);///+++
        glutSolidTeapot(0.3);///+++
    glPopMatrix();///+++
    angle+=5;///+++
    //glutSolidTeapot(0.3);
    glutSwapBuffers();
}

int main(int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week05 light");
    glutDisplayFunc(display);

    glutIdleFunc(display);///+++

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
}

week04

week04

主題 : 旋轉Rotate


一、範例

(1)到 這裡 將 data、win32、gult32.dll 下載並解壓縮
(同 week02 一、使用freeglut簡化程式)











(2)即可開啟Transformation.exe












二、滑鼠移動motion

(1)同 week01 第一個GLUT程式相同


(2)刪除原本程式,並加上以下程式碼,滑鼠即可點茶壺移動








(以下為程式碼)

#include <GL/glut.h>
float x=0,y=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef((x-150)/150.0,-(y-150)/150.0,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int nowx,int nowy)
{
    x=nowx;y=nowy;
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04");
    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();

}




三、滑鼠移、轉



(1)程式碼中增加rotate,即可用滑鼠將茶壺轉動









(以下為程式碼)


#include <GL/glut.h>
float x=0,y=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glRotatef(  x  ,0,1,0);        
    glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();



}
void motion(int nowx,int nowy)
{
    x=nowx;y=nowy;
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04");
    glutDisplayFunc(display);
    glutMotionFunc(motion);



    glutMainLoop();





}




(可將中間標記地方修改一下,旋轉方向即可改變)


week03

week03


主題 : 移動 Translate



>實做 : glTranslate(x,y,z)


(1)到 這裡 data、win32、gult32.dll 下載並解壓縮,
(同 week02 一、使用freeglut簡化程式)











(2)下載完之後點開資料夾中的 Transformation.exe












(同 week01 一、第一個GLUT程式)





























(4)開啟codeblocks>File>new>project>GLUT Project
(刪掉原本的程式碼貼上新的程式碼)












(以下為程式碼)



#include <GL/glut.h>


void display()

{
    glPushMatrix(); ///備份矩陣,保護好
    glTranslatef(0.2,0.2,0); ///Translate移動x,y,z,  f浮點數
     glutSolidTeapot(0.3);
    glPopMatrix(); ///還原矩陣,保護好
    glutSwapBuffers();

}

int main(int argc,char ** argv)
{

    glutInit( &argc,argv);  ///啟動GLUT

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week03 translate");

    glutDisplayFunc(display);

    glutMainLoop();

}