第四週
第一堂課
先去到https://jsyeh.org/3dcg10/ 下載data,windows壓縮檔
並且將解壓縮後的data資料夾放置windows資料夾內
打開transformation.exe即會成以下畫面
紅色框框是y軸旋轉軸
如果是(1.00,0.00,0.00)x軸是旋轉軸
如果是(0.00,0.00,1.00)x軸是旋轉軸
依照國中自然課所學右手開掌定則 來思考以下的動作
右手座標系統,手掌從x掃到y時,會生出拇指z軸朝向自己的鼻子
轉動時,拇指當旋轉軸再掃出你要的角度
更改x,y軸都成1.00
第二堂課
開啟codeblocks /去到桌面葉老師上課用軟體/解壓縮freeglut/ 將freeglut資料夾拉到桌面
lib內複製改名/
第一個程式(旋轉的白色茶壺)
複製上週茶壺的程式剪貼過來並且修修改改
#include <GL/glut.h>
float angle=0;///step02-1宣告global 全域變數(不在函式裡頭)angle
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景,殘影
glPushMatrix();///備份矩陣
glRotated( 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);///有空idle時,就重畫畫面
glutMainLoop();
}
第二個程式(旋轉的黃色茶壺)
#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 };
void myLight()
{
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);
}
float angle=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
glPushMatrix();///備份矩陣
glRotated( 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);///有空idle時,就重畫畫面
myLight();
glutMainLoop();
}
更改上個程式 加兩行字!
更改背景顏色以及茶壺的顏色更改為黃色
第三個程式(旋轉黃,紅茶壺)
///week04-3_rotate_translate
#include <GL/glut.h>
float angle=0;///step02-1宣告global 全域變數(不在函式裡頭)angle
void display()
{
glEnable(GL_DEPTH_TEST);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景,殘影
glPushMatrix();///備份矩陣
glTranslatef(0.6,0,0);
glRotated( angle, 0, 1, 0);///旋轉angle角度
glColor3f(1,1,0);
glutSolidTeapot( 0.3 );
glPopMatrix();///step02-1還原矩陣
glPushMatrix();///step02-1備份矩陣
glRotated( angle, 0, 1, 0);///旋轉angle角度
glTranslatef(0.6,0,0);
glColor3f(1,0,0);
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);///有空idle時,就重畫畫面
glutMainLoop();
}














沒有留言:
張貼留言