2024年3月28日 星期四

YT's 電腦圖學 Week06

 #期中考題目 

1. 期中考題 jsyeh.org/gl (會用Moodle考)


 #week06-0_sample 

1. 安裝freeglut, 把 lib\ libfreeglut.a 複製成 libglut32.a --> set new project

2. 不刪程式碼,Ctrl+F 找程式碼 light --> 找到程式碼 (宣告、函式)


// 8行

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


// 12+2行

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




 #week06-1_lighting 

1. 貼上 GLUT 11行程式碼

2. 貼上剛剛 week06-0_sample 的打光程式碼 

!! 執行時會發現茶壺暗暗的,因為 " 背光 " !!


更改光源位置 (加負號)  茶壺就會變更亮更立體


改光顏色


 light_ambient[] --> 環境、周圍 
 light_diffuse[] --> (光線) 漫射 
 light_specular[] --> 反射 
 light_position[] --> 光源位置 



 #課本範例 

1. 到 https://jsyeh.org/3dcg10/ 下載 source、data、win32 (步驟和前相同,把windows解壓縮,data檔案拉進去 --> 打開Light Material.exe





 # week06-2_lighting_glNormal3f 

1. 把剛剛 week06-1_lighting 的程式碼複製

2. 加上 四邊形,有設定法向量



茶壺會轉動





 #week06-3_glm_obj_model 

1. 貼入11程式碼

2. 從課本範例 source.zip 有3個程式檔: transformation.c、glm.h、glm.c 解壓縮

3. 要將專案做設定
    (1) 把 "glm.h" 放到 桌面\week06-3_glm_obj_model 目錄裡
    (2) 把 "glm.c" 放到 桌面\week06-3_glm_obj_model 目錄裡,改檔名為 "glm.cpp"
    (3) 在專案裡按右鍵 Add Files,加入 glm.cpp
4. 要把 data 資料夾放到 桌面\freeglut\bin 目錄裡

5. 用 Notead++ 開啟 transformation.c 找關鍵字貼程式碼
    (1) #include "glm.h"
    (2) GLMmodel* pmodel = NULL;
    (3) drawmodel() 函式
    --> void
drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/flowers.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}


















 





沒有留言:

張貼留言