2019年5月3日 星期五

06160371-week11

1.先下載老師給的data,win32,glut32.dll
   http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/


2.window.zip解壓縮到window資料夾,複製glut32.dll到window資料夾裡
   















3.先開啟freeglut windows網站 https://www.transmissionzero.co.uk/software/freeglut-devel/
然後解壓縮然後打開lib資料夾,複製貼上libfreeglut.a,把複製的改名為libglut32.a



4.打開codeblack先建一個glut然後開啟執行,並把本來的程式刪光光


5.接收老師給的程式碼,並用note++打開



7.在codeblack貼上程式碼並執行(只有水壺)

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");

    glutDisplayFunc(display);

    glutMainLoop();
}




8.在codeblack貼上程式碼並執行(水壺+(小水壺)手臂)


#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.3, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂
    glPopMatrix();

    glutSwapBuffers();
    angle++;///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);

    glutMainLoop();
}

    (紅色的水壺會360度旋轉)

9.在codeblack貼上程式碼並執行(水壺+(2個小水壺)手臂)

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();

    glutSwapBuffers();
    angle++;///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);

    glutMainLoop();
}

10.在codeblack貼上程式碼並執行(水壺+(2個小水壺)手臂->用滑鼠控制)

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///NOW  ///NOW3
}
void motion(int x, int y)///NOW3
{
    angle = x; ///NOW3 用滑鼠mouse來控制angle
    display(); ///NOW3 用滑鼠mouse來控制angle

}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion); ///NOW3 用滑鼠mouse來控制angle
    glutMainLoop();
}

11.在codeblack貼上程式碼並執行(水壺+(2個小水壺)2隻手臂->用滑鼠控制)

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();
    glPushMatrix();///右邊手臂  ///NOW4複製左半邊
        glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肩 ///NOW4複製左半邊
        glRotatef(angle, 0,0,1);///(2) 旋轉 NOW4複製左半邊
        glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 ///NOW4複製左半邊

        glColor3f(1,0,0);///紅色的 ///NOW4複製左半邊
        glutSolidTeapot( 0.15 );///右手臂 ///NOW4複製左半邊
        glPushMatrix();///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肘///NOW2 ///NOW4複製左半邊
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 ///NOW4複製左半邊

            glColor3f(1,0,0);///紅色的///NOW2 ///NOW4複製左半邊
            glutSolidTeapot( 0.15 );///右下手臂///NOW2 ///NOW4複製左半邊
        glPopMatrix();///NOW2 ///NOW4複製左半邊

    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///NOW  ///NOW3
}
void motion(int x, int y)///NOW3
{
    angle = x; ///NOW3 用滑鼠mouse來控制angle
    display(); ///NOW3 用滑鼠mouse來控制angle

}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion); ///NOW3 用滑鼠mouse來控制angle
    glutMainLoop();
}

12.在codeblack貼上程式碼並執行(水壺+(2個小水壺)2隻手臂->用滑鼠控制)->調整

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();
    glPushMatrix();///右邊手臂  ///NOW4複製左半邊
        glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肩 ///NOW4複製左半邊
        glRotatef(-angle, 0,0,1);///(2) 旋轉 NOW4複製左半邊
        glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 ///NOW4複製左半邊

        glColor3f(1,0,0);///紅色的 ///NOW4複製左半邊
        glutSolidTeapot( 0.15 );///右手臂 ///NOW4複製左半邊
        glPushMatrix();///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肘///NOW2 ///NOW4複製左半邊
            glRotatef(-angle, 0,0,1);///(2) 旋轉///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 ///NOW4複製左半邊

            glColor3f(1,0,0);///紅色的///NOW2 ///NOW4複製左半邊
            glutSolidTeapot( 0.15 );///右下手臂///NOW2 ///NOW4複製左半邊
        glPopMatrix();///NOW2 ///NOW4複製左半邊

    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///NOW  ///NOW3
}
int oldX,oldY; ///NOW5
void motion(int x, int y)///NOW3
{
    angle += (x-oldX); ///NOW3 用滑鼠mouse來控制angle
    oldX=x; ///NOW5
    display(); ///NOW3 用滑鼠mouse來控制angle

}
void mouse(int button, int state, int x, int y) ///NOW5 要知道mouse的按鍵狀況
{
    oldX = x; ///NOW5 要知道mouse的按鍵狀況

}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
glutMotionFunc(motion); ///NOW3 用滑鼠mouse來控制angle
glutMouseFunc(mouse); ///NOW5 要知道mouse的按鍵狀況

    glutMainLoop();
}


12.在codeblack貼上程式碼並執行(水壺+(2個小水壺)2隻手臂->用滑鼠控制)關節都能各自動

#include <GL/glut.h>
float angle1=0, angle2=0, angle3=0, angle4=0;///NOW ///NOW6 配合鍵盤
int jointID=1;///NOW6 配合鍵盤
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();
    glPushMatrix();///右邊手臂  ///NOW4複製左半邊
        glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肩 ///NOW4複製左半邊
        glRotatef(-angle, 0,0,1);///(2) 旋轉 NOW4複製左半邊
        glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 ///NOW4複製左半邊

        glColor3f(1,0,0);///紅色的 ///NOW4複製左半邊
        glutSolidTeapot( 0.15 );///右手臂 ///NOW4複製左半邊
        glPushMatrix();///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肘///NOW2 ///NOW4複製左半邊
            glRotatef(-angle, 0,0,1);///(2) 旋轉///NOW2 ///NOW4複製左半邊
            glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 ///NOW4複製左半邊

            glColor3f(1,0,0);///紅色的///NOW2 ///NOW4複製左半邊
            glutSolidTeapot( 0.15 );///右下手臂///NOW2 ///NOW4複製左半邊
        glPopMatrix();///NOW2 ///NOW4複製左半邊

    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///NOW  ///NOW3
}
int oldX, oldY;///NOW5
void motion(int x, int y)///NOW3 用滑鼠mouse來控制angle
{
    if(jointID==1) angle1 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==2) angle2 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==3) angle3 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    if(jointID==4) angle4 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤
    oldX=x;///NOW5
    display();///NOW3 用滑鼠mouse來控制angle
}
void mouse(int button, int state, int x, int y)///NOW5 要知道mouse的按鍵狀況
{
    oldX = x; oldY = y;///NOW5 要知道mouse的按鍵狀況, 按下去時,就記得 oldX
}
void keyboard(unsigned char key, int x, int y)///NOW6 配合鍵盤
{
    if(key=='1') jointID=1;///NOW6 配合鍵盤
    if(key=='2') jointID=2;///NOW6 配合鍵盤
    if(key=='3') jointID=3;///NOW6 配合鍵盤
    if(key=='4') jointID=4;///NOW6 配合鍵盤
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");

    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);///NOW3 用滑鼠mouse來控制angle
    glutMouseFunc(mouse);///NOW5 要知道mouse的按鍵狀況
    glutKeyboardFunc(keyboard);///NOW6 配合鍵盤

    glutMainLoop();
}











沒有留言:

張貼留言