2020年4月21日 星期二

week8汪.

week8上課時老師就預告了這次的作業


 光聽就覺得相當的複雜

介紹了需多glut的函式
Sphere圓形
    Cone圓筒等....
回家作業練習

1.先做出一個小長方形(將他丟入函式裡
2.修正他的大小 
3.讓他對著z軸旋轉
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();///備份
    glScalef(1,0.3,0.3);///x不變,y,z都變1/3
    glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;///TODO
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0,0,1);///對z軸旋轉
    upper_arm();///呼叫函示
    glPopMatrix();///還原
    angle++;///TODP:
    glutSwapBuffers();
}
int main(int argc,char **argv)
{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///TODO:
    glutDisplayFunc(display);
    glutMainLoop();
}
4.多+glTranslated(0.25,0,0);調整x軸的位置 讓他中心點換位置 在Rotate下方
5.在+一個glTranslated(0.5,0.5,0);在Rotate上方
學習去如何讓目標物改變位置跟旋轉位置(利用TRT)
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();///備份
    glScalef(1,0.3,0.3);///x不變,y,z都變1/3
    glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;///TODO
void display()
{
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

   glPushMatrix();///右手
         glTranslated(0.2,0,0);///把下面手肘為中心,轉動的手,掛到右上角去
         glRotatef(angle,0,0,1);///對z軸旋轉 再對症中心轉動,讓手肘像時針一樣,掛在中心軸
        glTranslated(0.25,0,0);///把手肘(旋轉中心)放到畫面正中心
        glColor3f(1,0,0); arm();///畫紅色的手(上手臂

    glPushMatrix();
        glTranslated(0.25,0,0);///把下面的手肘為中心,讓轉動的手,掛到右上角去
        glRotatef(angle,0,0,1);///
        glTranslated(0.25,0,0);///
        glColor3f(1,1,0); arm();///畫黃色的手(下手臂
       glPopMatrix();///還原
    glPopMatrix();
    glPushMatrix();///左手
        glTranslated(-0.2,0,0);///
        glRotatef(-angle,0,0,1);///
        glTranslated(-0.25,0,0);///
        glColor3f(1,0,0); arm();
     glPushMatrix();
        glTranslated(-0.25,0,0);///
        glRotatef(-angle,0,0,1);///
        glTranslated(-0.25,0,0);///
        glColor3f(1,1,0); arm();
    glPopMatrix();
     glPopMatrix();
    glPopMatrix();///還原
    angle++;///TODP:
    glutSwapBuffers();
}
int main(int argc,char **argv)
{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);///TODO:
    glutDisplayFunc(display);
    glutMainLoop();
}
int dx=1;
 angle+=dx;
    if(angle>60)dx=-1;
    if(angle<0)dx=+1;


沒有留言:

張貼留言