2021年3月29日 星期一

MCUCG_Week06

 1.旋轉方塊

2.旋轉方塊


3.手

4.手旋轉
5.雙自動手臂
6.雙雙自動手臂











week06

 


物體旋轉
#include <GL/glut.h>
#include <stdio.h> ///TODO
float angle=0;
int N=0,vx[3000], vy[3000];
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();

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

}
void motion(int x,int y)

{
    angle++;
    display();

} ///TODO 印出來

int main(int argc,char** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);

    glutCreateWindow("Week06 drawing");

    glutDisplayFunc(display);

    glutMotionFunc( motion );

    glutMainLoop();

}
自己旋轉
#include <GL/glut.h>
float angle=0;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    glRotatef(angle++,0,0,1);
    glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();

}


int main(int argc,char** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);

    glutCreateWindow("Week06 drawing");
    glutIdleFunc(display);
    glutDisplayFunc(display);

    glutMainLoop();

}
#include <GL/glut.h>
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);
    glRotatef(angle++,0,0,1);
    glTranslatef(-0.25,0,0);
    hand();
    glPopMatrix();
    hand();
    glutSwapBuffers();

}


int main(int argc,char** argv)

{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week06 drawing");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}
手臂旋轉
#include <GL/glut.h>
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);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);
            glRotatef(angle,0,0,1);
            glTranslatef(-0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}


int main(int argc,char** argv)

{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week06 drawing");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

雙手一起轉
#include <GL/glut.h>
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);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);
            glRotatef(angle,0,0,1);
            glTranslatef(-0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();

      glPushMatrix();
        glTranslatef(+0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(+0.25,0,0);
        hand();
        glPushMatrix();
            glTranslatef(+0.25,0,0);
            glRotatef(-angle,0,0,1);
            glTranslatef(+0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    angle++;
}


int main(int argc,char** argv)

{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week06 drawing");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}



week06

 本周教學的內容如下:

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    ///glTranslatef(0,0,0);
    ///glRotatef(angle++,0,0,1);
    glTranslatef(-0.25,0,0);
        glRotatef(angle++,0,0,1);
        glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreataWindow("08160210我是黃品嘉");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}




#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    ///glTranslatef(0,0,0);把正確轉動的手臂,掛在肩上
    ///glRotatef(angle++,0,0,1);轉動
    glTranslatef(-0.25,0,0);將旋轉中心,放在正中心
        glRotatef(angle++,0,0,1);細細長長
        glutSolidCube(1);方塊
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);顯示模式
    glutCreataWindow("08160210我是黃品嘉");開窗
    glutIdleFunc(display);idle很閒的時候,就重畫面
    glutDisplayFunc(display);
    glutMainLoop();
}


#include <GL/glut.h>
float angle=0;
void hand()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    ///glTranslatef(0,0,0);
    ///glRotatef(angle++,0,0,1);
    glTranslatef(-0.25,0,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
        glutSolidCube(1);
    glPopMatrix();
    hand();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreataWindow("08160210我是黃品嘉");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

#include <GL/glut.h>
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();要掛在哪裡,不一定是-0.25
        glTranslatef(-0.25,0,0);手臂,掛上去肩關節
        glRotatef(angle++,0,0,1);轉動
        glTranslatef(-0.25,0,0);將旋轉中心,放在正中心
        hand();上手臂
        glPushMatrix();
        glTranslatef(-0.25,0,0);把正確轉動的手肘,掛在肘關節
        glRotatef(angle++,0,0,1);轉動
        glTranslatef(-0.25,0,0);將旋轉中心,放在正中心
        hand();下手肘
}
    glPopMatrix();
    glutSwapBuffers();
    angle++;






void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
        glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(angle++,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
    glPopMatrix();
    glPopMatrix();
   
    glPushMatrix();
        glTranslatef(+0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(+0.25,0,0);
        hand();
        glPushMatrix();
        glTranslatef(+0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(+0.25,0,0);
        hand();
    glPopMatrix();
     glPopMatrix();
    glutSwapBuffers();
    angle++;
}


阿米君の電腦圖學小筆記_Week06

☆複習上週內容☆

開啟上週檔案


☆本週內容☆
劃出藍色方塊
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float vx[2000],vy[2000];
float angle=0;
int N=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( );
}

void mouse(int button,int state,int x,int y)  ///不做事
{
}

void motion(int x,int y)
{
    printf("%d %d\n",x,y);
    vx[N]=(x-150)/150.0;
    vy[N]=-(y-150)/150.0;
    N++;
    display( );
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop( );
}
方塊"自行"旋轉
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float angle=0;
void display( )
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix( );   ///備份矩陣
        glRotatef(angle++,0,0,1);   ///角度增加
        glutSolidCube(1);   ///方塊
    glPopMatrix( );    ///還原矩陣
    glutSwapBuffers( );
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);  ///Idlec很閒時就重畫面
    glutIdleFunc(display);   /// 顯示函式
    glutMainLoop( );
}
方塊"繞中央"旋轉
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float angle=0;

void display( )
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix( );
        glRotatef(angle++,0,0,1);   ///角度增加
        glTranslatef(-0.25,0,0);   ///旋轉中心放在"中央"
        glScalef(0.5,0.1,0.1);   ///細長的
        glutSolidCube(1);   ///方塊
    glPopMatrix( );
    glutSwapBuffers( );
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);   ///Idlec很閒時就重畫面
    glutIdleFunc(display);   ///顯示函式
    glutMainLoop( );
}
方塊"肩上"旋轉

程式碼:
#include <GL/glut.h>
#include <stdio.h>
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);   ///(2)旋轉
        glTranslatef(-0.25,0,0);   ///(1)旋轉中心放在"中央"
        hand( );
    glPopMatrix( );
    hand( );
    glutSwapBuffers( );
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);   ///Idlec很閒時就重畫面
    glutIdleFunc(display);   ///顯示函式
    glutMainLoop( );
}
藍色方塊"按按鍵"旋轉
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float vx[2000],vy[2000];
float angle=0;
int N=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( );
}

void keyboard(unsigned char key,int x,int y)  ///按下鍵盤
{
    angle++;  ///角度增加
    display( );
}

void mouse(int button,int state,int x,int y)  ///不做事
{
}

void motion(int x,int y)
{
    printf("%d %d\n",x,y);
    vx[N]=(x-150)/150.0;
    vy[N]=-(y-150)/150.0;
    N++;
    display( );
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutKeyboardFunc(keyboard);  ///按下鍵盤"旋轉"
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop( );
}
"手肘"與"手臂"旋轉

程式碼:
#include <GL/glut.h>
#include <stdio.h>
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.35,0,0);   ///(3)轉動的上手臂掛上肩關節
        glRotatef(angle,0,0,1);    ///(2)旋轉
        glTranslatef(-0.35,0,0);   ///(1)旋轉中心放在"中央"
        hand( );   ///上手臂
        glPushMatrix();
            glTranslatef(-0.25,0,0);   ///(3)轉動的手肘掛在肩上
            glRotatef(angle,0,0,1);    ///(2)旋轉
            glTranslatef(-0.25,0,0);   ///(1)旋轉中心放在"中央"
            hand( );   ///下手肘
        glPopMatrix( );
    glPopMatrix( );
    glutSwapBuffers( );
    angle++;   ///角度增加
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);   ///Idlec很閒時就重畫面
    glutIdleFunc(display);   ///顯示函式
    glutMainLoop( );
}
"手肘"與"手臂"旋轉
程式碼:
#include <GL/glut.h>
#include <stdio.h>
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.35,0,0);   ///(3)轉動的手臂掛在肩上
        glRotatef(angle,0,0,1);    ///(2)旋轉
        glTranslatef(-0.35,0,0);   ///(1)旋轉中心放在"中央"
        hand( );   ///上手臂
        glPushMatrix( );
            glTranslatef(-0.25,0,0);   ///(3)轉動的手臂掛在肩上
            glRotatef(angle,0,0,1);    ///(2)旋轉
            glTranslatef(-0.25,0,0);   ///(1)旋轉中心放在"中央"
            hand( );   ///下手肘
        glPopMatrix( );
    glPopMatrix( );

    glPushMatrix( );   ///右半邊
        glTranslatef(0.35,0,0);     ///(3)轉動的手臂掛在肩上
        glRotatef(-angle,0,0,1);   ///(2)旋轉
        glTranslatef(0.35,0,0);     ///(1)旋轉中心放在"中央"
        hand( );   ///上手臂
        glPushMatrix( );
            glTranslatef(0.25,0,0);   ///(3)轉動的手臂掛在肩上
            glRotatef(-angle,0,0,1); ///(2)旋轉
            glTranslatef(0.25,0,0);   ///(1)旋轉中心放在"中央"
            hand( );   ///下手肘
        glPopMatrix( );
    glPopMatrix( );
    glutSwapBuffers( );
    angle++;
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("Week06 week");

    glutDisplayFunc(display);   ///Idlec很閒時就重畫面
    glutIdleFunc(display);   ///顯示函式
    glutMainLoop( );
}

現在開始斗內Week06

 Week06

1.上星期的加一點紅色的程式碼

#include <GL/glut.h>
#include <stdio.h>
float vx[2000],vy[2000];
float angle=0;
int N=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();
}
void keyboard(unsigned char key,int x,int y)
{
}
void motion(int x,int y)
{
    angle++;
    display();
}
int main(int argc, char**argv )
{
    glutInit(&argc, argv);///初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示模式
    glutCreateWindow("Week05");///開視窗
    glutDisplayFunc(display);///顯示函式
    glutMotionFunc(motion);
    glutMainLoop();
}

2.超精簡版
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle++,0,0,1);
        glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv )
{
    glutInit(&argc, argv);///初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示模式
    glutCreateWindow("Week06");///開視窗

    glutIdleFunc(display);
    glutDisplayFunc(display);///顯示函式
    glutMainLoop();
}
3.改中心
+glTranslatef(-0.25,0,0);
4.用viod裝手
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);
        glRotatef(angle++,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
    glPopMatrix();
    hand();
    glutSwapBuffers();
}
5.手有兩節
#include <GL/glut.h>
float angle=0;
void hand()
{
    glPushMatrix();
        glScalef(0.5,0.1,0.1);
        glutSolidCube(1);
    glPopMatrix();
}
void a()
{
    glTranslatef(-0.25,0,0);
    glRotatef(angle,0,0,1);
    glTranslatef(-0.25,0,0);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        a();
        hand();
        glPushMatrix();
            a();
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}
int main(int argc, char**argv )
{
    glutInit(&argc, argv);///初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示模式
    glutCreateWindow("Week06");///開視窗

    glutIdleFunc(display);
    glutDisplayFunc(display);///顯示函式
    glutMainLoop();
}
6.兩隻手
#include <GL/glut.h>
float angle=0;
void hand()
{
    glPushMatrix();
        glScalef(0.5,0.1,0.1);
        glutSolidCube(1);
    glPopMatrix();
}
void a()
{
    glTranslatef(-0.25,0,0);
    glRotatef(angle,0,0,1);
    glTranslatef(-0.25,0,0);
}
void b()
{
    glTranslatef(0.25,0,0);
    glRotatef(-angle,0,0,1);
    glTranslatef(0.25,0,0);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        a();
        hand();
        glPushMatrix();
            a();
            hand();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();
        b();
        hand();
        glPushMatrix();
            b();
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}
int main(int argc, char**argv )
{
    glutInit(&argc, argv);///初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示模式
    glutCreateWindow("Week06");///開視窗

    glutIdleFunc(display);
    glutDisplayFunc(display);///顯示函式
    glutMainLoop();
}









腳超麻 Week06

 

電腦圖學 Week06

JOJO的電腦圖學_week06

210329 week06

🔔 ❤️

今天是各種轉轉系列

空白鍵轉轉











(有點長)

(粉紅底       為新增的藍藍細長方塊)

(抹茶色底       為按空白鍵就能轉動的關鍵)

#include <GL/glut.h>///(0)使用GLUT外掛

#include <stdio.h>

int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1

float angle=0;///有N個頂點

void display()

{

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

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle,0,0,1);///TODO:旋轉

        glScalef(0.5,0.1,0.1);///調成細長的

        glColor3f(0.3,0.3,1.0);///藍藍的

        glutSolidCube(1);///方塊


    glPopMatrix();///TODO:還原矩陣

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

}

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

{

    angle++;///TODO:

    display();///TODO:

}

void motion(int x,int y)

{

    printf("%d %d\n",x,y);///把頂點記起來,等等要畫

    vx[N]=(x-150)/150.0;

    vy[N]=-(y-150)/150.0;

    N++;

    display();

}

int main(int argc, char**argv)///???以前是int main()

{

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

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

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutKeyboardFunc(keyboard);

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    ///glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式

    glutMainLoop();///(5)主要迴圈

}

滑鼠轉轉









(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

#include <stdio.h>

int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1

float angle=0;///有N個頂點

void display()

{

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

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle,0,0,1);///TODO:旋轉

        glScalef(0.5,0.1,0.1);///調成細長的

        glColor3f(0.3,0.3,1.0);///藍藍的

        glutSolidCube(1);///方塊


    glPopMatrix();///TODO:還原矩陣

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

}

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

{

}

void motion(int x,int y)

{

    angle++;///TODO:////TODO:只要mouse在motion時,就會增加角度

    display();///TODO:增加後,重畫畫面

    //printf("%d %d\n",x,y);///把頂點記起來,等等要畫

   // vx[N]=(x-150)/150.0;

    ///vy[N]=-(y-150)/150.0;

   //// N++;

    //////display();

}

void mouse(int button,int state,int x,int y)

{

}

int main(int argc, char**argv)///???以前是int main()

{

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

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

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutKeyboardFunc(keyboard);

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式

    glutMainLoop();///(5)主要迴圈

}

方塊轉轉(自己轉)






(刪掉豪多部分)

(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void display()

{

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

   glPushMatrix();///TODO:備份矩陣

        glRotatef(angle++,0,0,1);///TODO2:要轉動angle

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

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

}

int main(int argc, char**argv)///???以前是int main()

{

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

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

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMainLoop();///(5)主要迴圈

}

長條轉轉(自己轉)








(抹茶色底       為更改部分)

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void display()

{

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

   glPushMatrix();///TODO:備份矩陣

        glTranslatef(0,0,0);///把正確的手臂,掛在肩上

        glRotatef(angle++,0,0,1);///TODO2:要轉動angle

        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心

       glScalef(0.5,0.1,0.1);///細細長長的

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

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

}

int main(int argc, char**argv)///???以前是int main()

{

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

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

    glutCreateWindow("08160891我是JOJO");///(3)開窗

    glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

   glutMainLoop();///(5)主要迴圈

}

這是一個不會轉的長條









把下面兩行刪掉即可

👉///glTranslatef(0,0,0);///把正確的手臂,掛在肩上

👉///glRotatef(angle++,0,0,1);///TODO2:要轉動angle

下手肘轉轉









(抹茶色底       為更改部分)

增加個void hand()

#include <GL/glut.h>///(0)使用GLUT外掛

float angle=0;///有N個頂點

void hand()

{

    glPushMatrix();///TODO:備份矩陣

        glScalef(0.5,0.1,0.1);///細細長長的

        glutSolidCube(1);///方塊

    glPopMatrix();///TODO:還原矩陣

}

void display()

{

......  

}

左手臂轉轉






更改void display()裡面的內容

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
    glPushMatrix();///TODO:備份矩陣
        glTranslatef(-0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle  ///angle不用++
        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心
        hand();///上手臂

    glPushMatrix();///TODO:備份矩陣
        glTranslatef(-0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle  ///angle不用++
        glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心
    hand();///下手肘
        glPopMatrix();///TODO:還原矩陣
    glPopMatrix();///TODO:還原矩陣
    glutSwapBuffers();///交換兩倍的Buffers
    angle++;    ///angle++
}


兩隻手轉轉
 glutSwapBuffers();///交換兩倍的Buffers
 angle++;
以上,新增右手臂的程式碼


glPushMatrix();///右手臂
        glTranslatef(+0.25,0,0);///把正確的手臂,掛在肩上
        glRotatef(angle,0,0,1);///TODO2:要轉動angle
        glTranslatef(+0.25,0,0);///將旋轉中心,放在正中心
        hand();///上手臂

        glPushMatrix();///TODO:備份矩陣
            glTranslatef(+0.25,0,0);///把正確的手臂,掛在肩上
            glRotatef(angle,0,0,1);///TODO2:要轉動angle
            glTranslatef(+0.25,0,0);///將旋轉中心,放在正中心
            hand();///下手肘
        glPopMatrix();///TODO:還原矩陣
    glPopMatrix();///TODO:還原矩陣


如果喜歡我的部落格的話
請幫我按右上角的愛心(根本按不下去)
也可以按右上角的小鈴鐺(這也按不下去)
才不會錯過我的更新哦!😉

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

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