2023年3月9日 星期四

大吃四斤Week04

 week04

從老師給的網址( https://jsyeh.org/3dcg10/ )下載windows.zip和data.zip,解壓縮後把data資料夾中的data放入windows的資料夾,後開啟windows裡的Transformation.exe


glRotatef ( 0.00 , 0.00 ,0.00 ,0.00 ) 第一格是旋轉的角度,後面三格是指定的向量,例如x軸是(1,0,0),y軸是(0,1,0),z軸是(0,0,1),右手拇指為向量方向,其他手指為轉動方向

x軸

y軸

z軸
float angle = 0 ; 全域變數 angle角度
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix ( ) ; 備份矩陣
glRotatef ( angle , 0 , 1 , 0 ) ; 轉 angle 度
glPopMatrix ( ) ; 還原矩陣
angle++ ; 角度++
glutIdleFunc(display) ; 重畫畫面
旋轉茶壺
從原本的GLUT程式碼中複製紅色框框中的程式碼( 打光 )( 第177行 Ctrl-F 找 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 } ;
----------------------------------------------------------------------------------
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) ;

打光後
Swap Translatef / Rotatef
自轉
glTranslatef(0.5,0,0) ; 右移0.5
glRotatef(angle,0,1,0) ; 轉動
glColor3f(0,0,1) ; 藍色
glutSolidTeapot(0.3) ; 茶壺
glRotatef(angle,0,1,0) ; 轉動
glTranslatef(0.5,0,0) ; 右移0.5
glColor3f(1,1,0) ; 黃色
glTranslatef(0,0.5,0) ; 上移0.5
glutSolidTeapot(0.3) ; 茶壺









沒有留言:

張貼留言