2024年3月25日 星期一

盛week06

 ##week06-1_sample_code

1.ctrl+f

2.搜尋ligth

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行程式碼:

glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);


    glutCreateWindow("GLUT Shapes");


    glutDisplayFunc(display);



    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-2_lighting

1.先貼上11行程式碼

2.再把20行程式碼拿來用

程式碼:

#include <GL/glut.h>


void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot(0.3);

    glutSwapBuffers();



}


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



int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);


    glutCreateWindow("GLUT Shapes");


    glutDisplayFunc(display);



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



}



##week06-3_light_glNormal

1.貼上剛剛的week06-1_light程式

2.把茶壺變成正方形

3.加上mouse轉動這個正方形

新增:

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

改顏色 0or1

const GLfloat light_diffuse[]  = { 0.0f, 1.0f, 1.0f, 1.0f };



程式碼:

#include <GL/glut.h>

float angle=0;

void display()

{

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



}


    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };

    const GLfloat light_diffuse[]  = { 0.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 };



int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);


    glutCreateWindow("GLUT Shapes");


    glutDisplayFunc(display);

    glutIdleFunc(display);


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



}




##week06-4_glm_obj_modle

1.把11行程式碼貼上

2.考source.zip裡面的transformation.c

3.#include "glm.h"

4.GLMmodle*pmodel=NULL

5.讀模型 做模型

6.glm.h進week06-4裡面

7.glm.c放進week06-4改名成glm.cpp

8.對著專案 按右鍵 新增專案glm.cpp

9.把data複製到freeglut\bin執行目錄裡

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



沒有留言:

張貼留言