2020年5月6日 星期三

week 11 打光

打光

下載 source  data  win32  glut32.dll



打開OBJ 檔  用Notepad++ 打開 
了解 v: vertex  f: face



從source 中  把glm.c glm.h  transformations.c 拉到下載
打開 Notepad++




解釋
#include "glm.h"///解釋: 使用外掛 glm的外掛 glm.h 配 glm.c (.cpp)
GLMmodel* pmodel = NULL;//解釋: 指標,指到資料結構 OBJ模型



打開openGL 把程式碼刪掉
glm.c glm.h 加到 week_11  把 glm.c改成glm.cpp
因為這是舊版的 改成cpp 比較好讀進去



在week_11按右鍵 Add files 新增 glm.cpp



在 freeglut 中 的 bin 新增 data



就可以產生 3D圖



親手做的程式

 if (model==NULL) model = glmReadOBJ("data/Al.obj"); ///讀入模型
glmUnitize(model); ///怕模型太大太小,改成Unit單位大小
glmFacetNormals(model); ///計算 facet 的法向量s
glmVertexNormals(model, 90); ///計算 vertex的法向量s
    glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);



打光, 陣列有光的參數

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 hight_shininess[] ={ 100.0f };
void display()

打光的程式

 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_POSITION, hight_shininess);

沒有留言:

張貼留言