2021年3月29日 星期一

week_06

 Week06

1.旋轉方塊

#include <GL/glut.h> ///(0)記得include

#include <stdio.h>///TODO

int N=0,vx[2000],vy[2000];///準備一堆頂點

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空

    glPushMatrix();

        glRotatef(angle,0,0,1);

        glScalef(0.5,0.1,0.1);

        glColor3f(0.3,0.3,1.0);

        glutSolidCube(1);

    glPopMatrix();

    glutSwapBuffers();///交換兩倍的buffers

}

void motion(int x,int y)///motion函式

{

    angle++;

    display();

}

void keyboard(unsigned char key,int x,int y)

{

}

int main(int argc, char ** argv)

{

    glutInit(&argc, argv);///(1)設定GLUT的初始碼

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("week05");///(3)開GLUT視窗

    glutDisplayFunc(display);///(4)顯示的函式

    glutMotionFunc(motion);///motion移動的函事(拖曳)

    glutKeyboardFunc(keyboard);

    glutMainLoop();///(5)GLUT主要的迴圈,卡住不要結束

}

2.簡化旋轉方塊


#include <GL/glut.h> ///(0)記得include

#include <stdio.h>///TODO

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空

    glPushMatrix();

        glRotatef(angle++,0,0,1);///每次display就angle++

        glutSolidCube(1);

    glPopMatrix();

    glutSwapBuffers();///交換兩倍的buffers

}

int main(int argc, char ** argv)

{

    glutInit(&argc, argv);///(1)設定GLUT的初始碼

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("week06");///(3)開GLUT視窗

    glutIdleFunc(display);///一直重複display

    glutDisplayFunc(display);///(4)顯示的函式

    glutMainLoop();///(5)GLUT主要的迴圈,卡住不要結束

}

3.將方塊旋轉中心移動
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glPushMatrix();
        ///glTranslatef(0,0,0);///(3)正確轉動手臂,掛在肩上
        ///glRotatef(angle++,0,0,1);///轉動
        glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
        glScalef(0.5,0.1,0.1);///細長
        glutSolidCube(1);///方塊
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的buffers
}
4.完成旋轉

void hand()
{
    glPushMatrix();
        glScalef(0.5,0.1,0.1);///細長
        glutSolidCube(1);///方塊
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glPushMatrix();
        glTranslatef(-0.25,0,0);///(3)正確轉動手臂,掛在肩上
        glRotatef(angle++,0,0,1);///轉動
        glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
        hand();
    glPopMatrix();
    hand();
    glutSwapBuffers();///交換兩倍的buffers
}
5.旋轉

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glPushMatrix();
    glTranslatef(-0.25,0,0);///(3)正確轉動手臂,掛在肩上
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);///(3)正確轉動手肘,掛在手臂上
            glRotatef(angle,0,0,1);///轉動
            glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}
6.兩隻手
#include <GL/glut.h> ///(0)記得include
#include <stdio.h>///TODO
float angle=0;
void hand()
{
    glPushMatrix();
        glScalef(0.5,0.1,0.1);///細長
        glutSolidCube(1);///方塊
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
    glPushMatrix();
    glTranslatef(-0.25,0,0);///(3)正確轉動手臂,掛在肩上
        glRotatef(angle,0,0,1);///轉動
        glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);///(3)正確轉動手肘,掛在手臂上
            glRotatef(angle,0,0,1);///轉動
            glTranslatef(-0.25,0,0);///(1)將旋轉中心放在中心
            hand();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();
    glTranslatef(0.25,0,0);///(3)正確轉動手臂,掛在肩上
        glRotatef(-angle,0,0,1);///轉動
        glTranslatef(0.25,0,0);///(1)將旋轉中心放在中心
        hand();
        glPushMatrix();
            glTranslatef(0.25,0,0);///(3)正確轉動手肘,掛在手臂上
            glRotatef(-angle,0,0,1);///轉動
            glTranslatef(0.25,0,0);///(1)將旋轉中心放在中心
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的buffers
    angle++;
}
int main(int argc, char ** argv)
{
    glutInit(&argc, argv);///(1)設定GLUT的初始碼
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
    glutCreateWindow("week06");///(3)開GLUT視窗
    glutIdleFunc(display);///一直重複display
    glutDisplayFunc(display);///(4)顯示的函式
    glutMainLoop();///(5)GLUT主要的迴圈,卡住不要結束
}

沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...