week04
1-1 https://jsyeh.org/3dcg10/ 下載data、 win32 資料夾
1-2 解壓縮windows.zip資料夾,將data.zip資料夾拉進windows資料夾
1-3 點開 Transformation.exe
1-4後面3個為座標 ex:以(0,1,0)為軸轉動 (y軸)
ex:以(1,0,0)為軸轉動 (x軸)
ex:以(0,0,1)為軸轉動 (z軸)
2-2 先將程式碼備份 改成上週程式碼
2-1 將freeglut資料夾拉到桌面
freeglut/lib 複製libfreeglut.a 更改為 libglut32.a
開啟CodeBlocks 開GLUT新專案 week04_Rotate
2-3 旋轉
#include <GL/freeglut.h>
float angle=0; ///全域變數 angle 角度
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清畫面
glPushMatrix(); ///備份矩陣
glRotatef(angle,0,1,0);///傳angle度
glutSolidTeapot( 0.3);
glPopMatrix();///還原矩陣
glutSwapBuffers();
angle++;///角度++
}
int main(int argc,char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04");
glutDisplayFunc(display);
glutIdleFunc(display); ///重畫畫面
glutMainLoop();
}
2-4 打光 從剛剛備份的程式碼中找light複製貼上
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 };
void mylight()
{
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);
}
4-1 開新專案 week04-3_rotate_translate
複製貼上week04-1程式碼 增加程式碼
glPushMatrix();
glTranslatef(0.5,0,0);///移到右邊的
glRotatef(angle,0,1,0);///旋轉中的
glColor3f(0,0,1);///藍色的
glutSolidTeapot( 0.3);///茶壺
glPopMatrix();
4-2
glPushMatrix();
glRotatef(angle,0,1,0);///旋轉中的
glTranslatef(0.5,0,0);///移到右邊的
glColor3f(1,1,0);///黃色的
glTranslatef(0,0.5,0);///移到上面的
glutSolidTeapot( 0.3);///茶壺
glPopMatrix();
















沒有留言:
張貼留言