1_期中模擬考題
glPushMatrix(); //備份矩陣glTranslatef(x,y,z); //移動
glRotatef(angle,x,y,z); //旋轉
glScalef(x,y,z); //縮放
glBegin(GL_POLYGON); //開始畫
glNormal3f(nx,ny,nz); //打光法向量
glTexCoord2f(tx,ty); //貼圖座標
glColor3f(r,g,b); //顏色
glVertex3f(x,y,z); //頂點
glEnd(); //結束畫
glPopMatrix(); //還原矩陣
2_打光
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix(); //備份矩陣
//glTranslatef(x,y,z); //移動
//glRotatef(angle,x,y,z); //轉動
glutSolidTeapot(0.3);
glPopMatrix(); //還原矩陣
glutSwapBuffers();
}
/*找light,留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};
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
//glutReshapeFunc(resize); //沒有用到
glutDisplayFunc(display);
//glutKeyboardFunc(key); //沒有用到
//glutIdleFunc(idle); //沒有用到
glClearColor(1,1,1,1);
/*找light,留8行,設定燈光內容是否開啟*/
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);
/*找light,留8行*/
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();
return EXIT_SUCCESS;
}
按下F9執行,結果如下:
3_旋轉打光
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix(); //備份矩陣
//glTranslatef(x,y,z); //移動
glRotatef(angle,0,1,0); //轉動
glutSolidTeapot(0.3);
glPopMatrix(); //還原矩陣
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);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
//glutReshapeFunc(resize);
glutDisplayFunc(display);
//glutKeyboardFunc(key);
glutIdleFunc(display); //電腦閒閒沒事的時候,就會一直呼叫display()
glClearColor(1,1,1,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();
return EXIT_SUCCESS;
}
按下F9執行,結果如下:
4_各種形狀
#include <GL/glut.h>float angle=0;
static void display(void)
{
angle++;
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix(); //備份矩陣
//glTranslatef(x,y,z); //移動
glRotatef(angle,0,1,0); //轉動
/*glutSolidTeapot(0.3); //茶壺
//glutSolidCone(0.3,0.7,15,15); //錐體(底,高,Slices柳丁切,Stack堆疊)
//glutSolidCube(0.5); //矩形(大小)
glScaled(0.5,0.5,0.5);
//glutSolidDodecahedron(); //十面體
//glutSolidIcosahedron(); //十二面體
//glutSolidOctahedron(); //八面體
//glutSolidTetrahedron(); //四面體
//glutSolidSphere(0.3,15,15); //球體(半徑,Slices,Stacks)
//glutSolidTorus(0.3,0.7,10,10);
//甜甜圈(環狀的半徑,整個甜甜圈的半徑,sild剖面的線條,垂直剖面的線條)
glutWireTorus(0.3,0.7,10,10); //網狀的甜甜圈*/
glPopMatrix(); //還原矩陣
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");
//glutReshapeFunc(resize);
glutDisplayFunc(display);
//glutKeyboardFunc(key);
glutIdleFunc(display); //電腦閒閒沒事的時候,就會一直呼叫display()
glClearColor(1,1,1,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();
return EXIT_SUCCESS;
}
按下F9後的各個呈現畫面(程式碼 執行結果)
5_ T-R-T
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(1,0,0);
glPushMatrix(); //備份矩陣
glTranslatef(0,0.5,0); //移動
glutSolidTeapot(0.3); //茶壺
glPopMatrix(); //還原矩陣
glPushMatrix(); //備份矩陣
glRotatef(angle,0,1,0); //轉動
glutSolidTeapot(0.3); //畫茶壺
glPopMatrix(); //還原矩陣
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");
//glutReshapeFunc(resize);
glutDisplayFunc(display);
//glutKeyboardFunc(key);
glutIdleFunc(display); //電腦閒閒沒事的時候,就會一直呼叫display()
glClearColor(1,1,1,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();
return EXIT_SUCCESS;
}
按下F9執行,結果如下:
沒有留言:
張貼留言