2019年3月22日 星期五

week05

1.打光light/materid

(1)照著之前的步驟下載開啟Light Material


 
上半部(調整打光的位置顏色)                             下半部(調整物體的顏色)
                                                                             
pos[](position)=>光的位置                                    藍色光打紅色物體=>黑色
Ka[](ambient light)=>無所不在的光                    綠色光打紅色物體=>黑色
Kd[](diffuse light)=                                                   光線rgb和物體rgb有對應關係
Ks[](specular light)                                                 Ke[]=>自體發光

按右鍵可以更換模型材質顏色

按右鍵可以更換模型


2.茶壺打光+自動旋轉

(1)照著之前的步驟開啟glut程式碼執行

     +-可以調解析度(細緻程度)


(2)重新打程式碼,複製幾段舊的程式碼執行

 茶壺會有光線照射並且會自動旋轉


程式碼:(灰色是複製來的)
#include <GL/glut.h>
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 };
float angle=0;///[新加]新增一個角度變數
void display()
{
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     glPushMatrix();///[新的]
        glRotatef(angle,0,1,0);///[新加]旋轉角度
        glutSolidTeapot(0.3);///[新加]
        glPopMatrix();///[新加]
        angle+=3;///[新加]轉動角度增加

    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("translate");
    glutDisplayFunc(display);
    glutIdleFunc(display);///[新加]如果沒加這行就不會自動轉動
    glClearColor(1,0,0,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();
}

沒有留言:

張貼留言