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();
}
沒有留言:
張貼留言