2024年4月22日 星期一

電學W10

 Week10

10-1. 開範例檔 week10-Sample


10-2.Cube製作Body,Arm

程式碼:

#include <GL/glut.h>

void myBody()

{

    glColor3f(1,0,0);///紅

    glutSolidCube(0.3);

}

void myArm()

{

    glPushMatrix();

    glColor3f(0,1,0);///綠

    glScalef(1.5,0.5,0.5);

    glutSolidCube(0.3);

    glPopMatrix(); 

}

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景

     glPushMatrix();

    glTranslatef(-0.6,+0.3,0);

    myBody();

    glPopMatrix(); //身體


    glPushMatrix();

    glTranslatef(+0.0,+0.3,0);

    glRotatef(angle++,0,0,1);

    glColor3f(0,1,0);///綠

    myArm();

    glPopMatrix();///手

    glutSwapBuffers();

}

int main(int argc, char *argv[])

{

  glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week10");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}

10-3.更改手的旋轉支點

1.將Rotatef的程式碼移至Translate前(更改旋轉中心)

2.Translate的X座標改成0.225


10-4.將手臂掛在肩上

1.把方塊的Translate Delete

2.在Arm的矩陣的Rotate前一行加Translate(0.3,0.3,0) (將整個Cube移動到想要的位子)
EX:

    glPushMatrix();
    glTranslatef(-0.3,0.3,0); (另一隻把X座標打0.3)
    glRotatef(angle++,0,0,-1);
    glTranslatef(0.225,0,0);
    myArm();
    glPopMatrix();

3.將 Body跟Arm 的Solid 改成 Wire(透明化)



10-5.加上手肘

1.在右臂的Push跟Pop 中間再加一個矩陣
如下:
    glPushMatrix();
    glTranslatef(0.225,0,0);
    glRotatef(angle++,0,0,1);
    glTranslatef(0.225,0,0);
    myArm();///右肘

2.新增左手肘的方法和右肘相同



10-6用滑樹拖曳

1.把angle++的++去掉

2.新增Motion函式
如下:
    void motion(int x,int y){
    angle=x;
    glutPostRedisplay();


    glutMotionFunc(motion);





沒有留言:

張貼留言