2020年4月21日 星期二

兩百一9

❌❓第9週❎✅

打開codeblocks->glut😛😛

1 glutSolidSphere 實心圓


2 glutSolidCone 實心甜筒


3 glutSolidTorus 實心甜甜圈


4 創造出一個實心方塊,並放大y、z



5 使用旋轉程式碼,但目前角度為0,還不會開始旋轉



6 角度不斷增加,開始旋轉



7 將旋轉重心從中間移至邊邊


8  把邊邊為中心的長方體放到旁邊

end

程式碼:
#include <GL/glut.h>
void upper_arm()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);
        glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0.5,0.5,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        upper_arm();
    glPopMatrix();
    angle++;

    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week");
    glutIdleFunc(display);
    glutDisplayFunc(display);

    glutMainLoop();
}


回家作業: 機械手臂

#include <Gl/glut.h>
#include <stdio.h>
#include <math.h>
void arm()
{
    glPushMatrix();///備份
        glScalef(1, 0.3, 0.3);///x不變,y,z都變1/3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
int dx=5;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

     glClearColor((153/255.0),(217/255.0),(234/255.0),0.1);///背景顏色
    glLineWidth(5);///線的粗細
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清除背景雜物

     glBegin(GL_POLYGON);///以點的方式開始畫圖
    glColor3f((255/255.0),(255/255.0),(255/255.0)); glVertex2f(-1,1);
     glColor3f((224/255.0),(145/255.0),(255/255.0)); glVertex2f(1,1);
     glColor3f((147/255.0),(210/255.0),(253/255.0)); glVertex2f(1,-1);
     glColor3f((255/255.0),(255/255.0),(255/255.0)); glVertex2f(-1,-1);

    glEnd();

    glPushMatrix(); ///備份 右手
        glTranslatef(0.2,0,0); ///把下面正在以手肘為中心,轉動的手,掛到右上角去
        glRotatef(angle, 0,0,1); ///旋轉角度
        glTranslatef(0.25, 0, 0); ///中心位置
        glColor3f((255/255.0),(255/255.0),(255/255.0)); arm(); ///上手臂(白)

        glPushMatrix();
        glTranslatef(0.2,0,0);///位置
        glRotatef(angle, 0,0,1);
        glTranslatef(0.25, 0, 0);
        glColor3f((255/255.0),(255/255.0),(255/255.0));arm();///下手臂(白)

        glPopMatrix();///還原

    glPopMatrix();

        glPushMatrix();///左手
        glTranslatef(-0.2,0,0);
        glRotatef(-angle, 0,0,1);
        glTranslatef(-0.25, 0, 0);
        glColor3f((255/255.0),(255/255.0),(255/255.0)); arm();///上手臂(白)

        glPushMatrix();
            glTranslatef(-0.2,0,0);
            glRotatef(-angle, 0,0,1);
            glTranslatef(-0.25, 0, 0);
            glColor3f((255/255.0),(255/255.0),(255/255.0)); arm();///下手臂(白)
        glPopMatrix();

    glPopMatrix();

    angle+=dx*0.04;
    if(angle>60) dx=-10;
    if(angle<0) dx=+1;

    glBegin(GL_POLYGON);///身體(白)

    glColor3f((255/255.0),(255/255.0),(255/255.0));

    for(float angle=0 ; angle<=3.1415926 * 2 ;angle+=0.01)

    {

    glVertex2f(0.5*cos(angle),0.5*sin(angle));

    }

    glEnd();

    glBegin(GL_POLYGON);///左眼(黑)

    glColor3f((0/255.0),(0/255.0),(0/255.0));

    for(float angle=0 ; angle<=3.1415926 * 2 ;angle+=0.01)

    {

    glVertex2f(0.08*cos(angle)-0.2,0.08*sin(angle)+0.05);

    }

    glEnd();

    glBegin(GL_POLYGON);///右眼(黑)

    glColor3f((0/255.0),(0/255.0),(0/255.0));

    for(float angle=0 ; angle<=3.1415926 * 2 ;angle+=0.01)

    {

    glVertex2f(0.08*cos(angle)+0.2,0.08*sin(angle)+0.05);

    }

    glEnd();

    glBegin(GL_POLYGON);///眼睛中間的線

    glColor3f(0/255.0,0/255.0,0/255.0);

    glVertex2f((125-150)/150.0, - (140-150)/150.0);

    glVertex2f((175-150)/150.0, - (140-150)/150.0);

    glVertex2f((175-150)/150.0, - (145-150)/150.0);

    glVertex2f((125-150)/150.0, - (145-150)/150.0);

    glEnd();

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


沒有留言:

張貼留言