2019年3月29日 星期五

Week06_小葉我想打、打電腦圖學!


小葉:???

不、不是,小葉你聽我解釋......!(;´・д・`)

___________

今天一樣要學打光
(不、不是,不要打綠光啊!)

一樣是在這裡下載 data、win32、glut32.dll ,測試有沒有用。

可以之後,創建一個新專案,打出上次的程式碼並修改這次新教的東西。


首先,標頭檔要加

#include "glm.h"
GLMmodel* pmodel = NULL;

以及,因為這次不再是茶壺先生當模特,所以改成

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    if (!pmodel) {                                                                              
        pmodel = glmReadOBJ("data/porsche.obj");                        
        if (!pmodel) exit(0);                                                               
        glmUnitize(pmodel);                                                             
        glmFacetNormals(pmodel);                                                  
        glmVertexNormals(pmodel, 90.0);                                       
    }                                                                                                
                                                                                                     
    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);          

改完之後,我們還不能執行喔!

一樣回到這裡,下載source】,先不用解壓縮,我們只要打開它


然後將 glm.hglm.c拉進去

並將 glm.c 改成 glm.cpp


glm.cpp 加入專案裡

然後將以解壓縮的 data 資料夾,丟進 freeglut 資料夾中的 bin 資料夾

執行



執行成功了呢!
_____________________________

搞這麼久,真的......


我很有自知之明的

玄玄兒OuO''_Week-06

作3D模型

原本下載的3個東西在多下載一個Source檔案


#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;

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 };
void display()
{
    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
     if(!pmodel) {
        pmodel = glmReadOBJ("data/Al.obj");
        if(!pmodel) exit(0);
        glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel, 90.0);
     }
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);

        glutSwapBuffers();

}
int main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow("week06");

    glutDisplayFunc(display);
    glEnable(GL_DEPTH_TEST);

    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();
}




REBUILD FUCK yoU

huangxuuu電腦圖學 week06

今天目標是學會讀立體模型


PART1.建立好windows目錄

小葉老師的電腦學資源網站

(1)下載[windows.zip][data.zip][glut32.dll [source.zip]


(2)把所有zip檔案解壓縮,與[glut32.dll] 一併移至windows目錄
(3)將source目錄中,以下藍色框格中的檔案放入windows目錄






PART2.將lightmaterial.c中重要程式碼貼到GLUT專案

(1)新增一個GLUT專案/*桌面須有完整的freeglut目錄(點我下載) */

(2)將GLUT專案中的main.cpp程式碼換成以下這一個(打光過的立體茶壺程式)


打光過的茶壺執行結果


(3)開啟lightmaterial.c並把程式區塊ABC貼到GLUT專案指定區域
用notepad++可以使用尋找功能來找到程式區塊ABC






GLU專案指定區域

















PART2結果



說明

A:freeglut目錄的include後面會接.h檔,告訴程式我們有哪些資料夾,專案目錄下只有glm.h一個.h檔

B:宣布我要使用模型

C:讀模型,且這個模型要在freeglut>bin>data目錄裡面,才能被GLUT專案讀到

PART3.此時程式還不能跑因為專案的GLM目錄沒有建立完

(1)將glm.c和glm.h匯入專案目錄中並改glm.c為glm.cpp

(2)將data資料夾(足球立體模型在裡面)匯入freeglut>bin目錄


(3)對專案右鍵,加入glm.cpp















PART3執行結果



-------------------------------------------------------------------------------------------------------------------------

作業



(1)用OBJ檔匯出自己的模型

(2)將OBJ檔匯入freeglut>bin>data目錄

(3)到專案改成自己模型的檔名

(4)編譯後會出現一個.mtl檔
將他也放到freeglut>bin>data目錄

(5)終於可以成功編譯,接下來只要作個人化設定就可以了!!!!




(1)縮放設定


(2)旋轉設定




(3)顏色設定



大功告成!!

接下來可以回顧一下程式碼






week06

1.先下載source,data,win32,glut32.dll


 2.將windows,data解壓縮開啟Light Material.exe

3.開啟Light Material.exe
    

4.按滑鼠右鍵可以更改圖形


5.複製libfreeglut.a並改為libglut32.a
   


6.將source解壓縮並將glm.cglm.h放入專案資料夾,將glm.c改為glm.cpp
 

7.複製程式碼並匯入glm.cpp


8.將data解壓縮並移入freeglut/bin裡面



9.執行





程式碼如下⇩
#include <GL/glut.h> #include "glm.h" GLMmodel* pmodel = NULL; 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 }; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!pmodel) { pmodel = glmReadOBJ("data/soccerball.obj"); if (!pmodel) exit(0); glmUnitize(pmodel); glmFacetNormals(pmodel); glmVertexNormals(pmodel, 90.0); } glmDraw(pmodel, GLM_SMOOTH); ///glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc, char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("06161030"); glutDisplayFunc(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(); }