2024年3月25日 星期一

weeh06 牢底座穿

 #week06

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

打光

##week06-0_sample_code

```cpp

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

```cpp ///打光相關函式呼叫2+12行

   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

貼上11行glut程式 再貼上方20行

const GLfloat light_diffuse[]  = { 0.0f, 1.0f, 0.0f, 1.0f };///改光的色彩

const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };///光的位置



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

##week06-2_lighting_glNormal13f

貼上week06-1_lighting的程式

把茶壺變正方形

加上mouse轉動這個正方形

```cpp

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glRotatef(angle++,0,1,0);

    glScalef(0.8,0.8,0.8);

    glBegin(GL_POLYGON);

        glNormal3f(0,0,1);

        glVertex2f(-1,-1);

        glVertex2f(+1,-1);

        glVertex2f(+1,+1);

        glVertex2f(-1,+1);

    glEnd();

    glPopMatrix();

    glutSwapBuffers();

```

glutIdleFunc(display);



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

##week06-3_glm_obj_model

1.#include "glm.h"///加的程式,使用glm的程式碼

2.GLMmodel * pmodel = NULL;///加的程式有顆指標指到模型檔

void drawmodel(void)

{

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

}

glm.h和 glm.c改檔名glm.cpp放到week06目錄裡

專案 右鍵 新增檔案 glm.cpp加入專案

data資料夾複製到freeglut\bin執行目錄(歷史餘毒)

把glutSolidTeapot(0.3);換成drawmodel();



沒有留言:

張貼留言