2024年4月25日 星期四

電腦圖學 week10

 ##week10

##week10-1_glutWireCube_myBody_myArm

0. 桌面安裝 freeglut,把 lib 的l ibfreeglut.a複製成 libglut32.a

1.File-New-Project ,Glut 專案week10-1_glutWireCube_myBody_myArm

2.貼上上週的week09-3_glutWireTeapot_glutWire_glutWireSphere的程式碼

3.要把 void display()改寫一下,呼叫 myBody  myArm()


##week10-2_rotate_myArm

1.File-New-Project ,Glut 專案week10-2_rotate_myArm

2.貼上week10-1_glutWireCube_myBody_myArm的程式碼

3.外面加上 float angle=0;

4.在 main() 加上glutIdleFunc(display);

5.在 display()裡,myArm()的前後要加上glPushMatrix();glRotatef(angle++,0,0,1);glPopMatrix();

///week10-2_rotate_myArm
///貼上week10-1_glutWireCube_myBody_myArm的程式碼
#include <GL/glut.h>
void myBody(){
    glPushMatrix();
       /// glTranslatef(0.0,-0.3,0);
        glColor3f(1,0,0);///紅色的
        glutWireCube(0.6);///glutWireCube(0.3);
    glPopMatrix();
}
void myArm(){
    glPushMatrix();///備份矩陣
        glColor3f(0,1,0);///綠色的
        glScalef(1,0.4,0.4);///my Body();
        glutWireCube(0.3);
    glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    myBody();
    glPushMatrix();
        glRotatef(angle++,0,0,1);
        myArm();
    glPopMatrix();


glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}




##week10-3_rotate_translate_myArm

1.File-New-Project ,Glut 專案week10-3_rotate_translate_myArm

2.貼上week10-2_rotate_myArm的程式碼

3.加上 glTranslatef(0,15,0,0);

#include <GL/glut.h>
void myBody(){
    glPushMatrix();
       /// glTranslatef(0.0,-0.3,0);
        glColor3f(1,0,0);///紅色的
        glutWireCube(0.6);///glutWireCube(0.3);
    glPopMatrix();
}
void myArm(){
    glPushMatrix();///備份矩陣
        glColor3f(0,1,0);///綠色的
        glScalef(1,0.4,0.4);///my Body();
        glutWireCube(0.3);
    glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    myBody();
    glPushMatrix();
        glRotatef(angle++,0,0,1);
        glTranslatef(0.15,0,0);
        myArm();
    glPopMatrix();


glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}


##week10-4_translate_rotate_translate_myArm

1.File-New-Project ,Glut 專案week10-4_translate_rotate_translate_myArm

2.貼上week10-3_rotate_translate_myArm的程式碼

3.加上最後一行glTranslatef(0.3,0.3,0);放在最上面 掛上去

#include <GL/glut.h>
void myBody(){
    glPushMatrix();
       /// glTranslatef(0.0,-0.3,0);
        glColor3f(1,0,0);///紅色的
        glutWireCube(0.6);///glutWireCube(0.3);
    glPopMatrix();
}
void myArm(){
    glPushMatrix();///備份矩陣
        glColor3f(0,1,0);///綠色的
        glScalef(1,0.4,0.4);///my Body();
        glutWireCube(0.3);
    glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    myBody();
    glPushMatrix();
        glTranslatef(0.3,0.3,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(0.15,0,0);
        myArm();
    glPopMatrix();


glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}



##week10-5_TRT_TRT_myArm

1.File-New-Project ,Glut 專案week10-5_TRT_TRT_myArm

2.貼上week10-4_translate_rotate_translate_myArm的程式碼

3.把整套glPushMatrix();glTranslatef(0.15,0,0);glRotatef(angle++,0,0,1);glTranslatef(0.15,0,0);

myArm(); glPopMatrix(); 要插在中間

#include <GL/glut.h>
void myBody(){
    glPushMatrix();
       /// glTranslatef(0.0,-0.3,0);
        glColor3f(1,0,0);///紅色的
        glutWireCube(0.6);///glutWireCube(0.3);
    glPopMatrix();
}
void myArm(){
    glPushMatrix();///備份矩陣
        glColor3f(0,1,0);///綠色的
        glScalef(1,0.4,0.4);///my Body();
        glutWireCube(0.3);
    glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    myBody();
    glPushMatrix();
        glTranslatef(0.3,0.3,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(0.15,0,0);
        myArm();
        glPushMatrix();
            glTranslatef(0.15,0,0);
            glRotatef(angle++,0,0,1);
            glTranslatef(0.15,0,0);
            myArm();
        glPopMatrix();
    glPopMatrix();


glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}


##week10-6_left_right_myArm

1.File-New-Project ,Glut 專案week10-5_TRT_TRT_myArm

2.貼上week10-5_TRT_TRT_myArm的程式碼



##week10-7_mouse_motion_angle_myArm

1.File-New-Project ,Glut 專案week10-7_mouse_motion_angle_myArm

2.貼上week10-6_left_right_myArm的程式碼

3.修改程式碼

#include <GL/glut.h>
void myBody(){
    glPushMatrix();
       /// glTranslatef(0.0,-0.3,0);
        glColor3f(1,0,0);///紅色的
        glutWireCube(0.6);///glutWireCube(0.3);
    glPopMatrix();
}
void myArm(){
    glPushMatrix();///備份矩陣
        glColor3f(0,1,0);///綠色的
        glScalef(1,0.4,0.4);///my Body();
        glutWireCube(0.3);
    glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    myBody();

    glPushMatrix();///右半邊
        glTranslatef(0.3,0.3,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(0.15,0,0);
        myArm();
        glPushMatrix();
            glTranslatef(0.15,0,0);
            glRotatef(angle++,0,0,1);
            glTranslatef(0.15,0,0);
            myArm();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();///左半邊
        glTranslatef(-0.3,0.3,0);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.15,0,0);
        myArm();
        glPushMatrix();
            glTranslatef(-0.15,0,0);
            glRotatef(angle,0,0,1);
            glTranslatef(-0.15,0,0);
            myArm();
        glPopMatrix();
    glPopMatrix();


glutSwapBuffers();
}
void motion(int x,int y){
    angle = x;
    glutPostRedisplay();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutIdleFunc(display);
glutMainLoop();
}


##week10-8_mouse_motion_angle_2myArm

1.File-New-Project ,Glut 專案week10-8_mouse_motion_angle_2myArm

2.貼上week10-7_mouse_motion_angle_myArm的程式碼

3.把 display()    裡面的左邊的 angle 改成 angle

(讓左右角度,正負相反)

##week10-9_PlaySound

1.File-New-Project ,Glut 專案week10-9_PlaySound

2.貼上week10-8_mouse_motion_angle_2myArm的程式碼

3.在include 的地方,加上#include <mmsystem.h>

4.在main第一行,加入PlaySound("C:/horse.wav",NULL,SND_ASYNC);

5.把老師的音檔horse.wav放在根目錄



























沒有留言:

張貼留言