2023年3月9日 星期四

咻碰閃week

 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-1 將freeglut資料夾拉到桌面
       freeglut/lib 複製libfreeglut.a 更改為 libglut32.a 
        開啟CodeBlocks 開GLUT新專案 week04_Rotate

2-2 先將程式碼備份 改成上週程式碼
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);
 
void mylight()
3-1 程式由下往上看

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();


























沒有留言:

張貼留言