2024年4月22日 星期一

熱血學圖學round10

week10 -- 4/22

(1)主題:T-R-T關節運動

(2)主題:階層運動

筆記原創:11160171

week10-0_sample:

解壓縮 freeglut-MinGW-3.0.0-1.mp.zip

把解壓縮完的檔案移到桌面

把124KB的檔案改名成 libglut32.a

⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10_TRT_glutSolidCube_myBody_myArm:

先複製上周week09-2的程式碼

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glTranslatef(-0.6,+0.3,0);

        glutSolidTeapot(0.3);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.0,+0.3,0);

        glutSolidCube(0.3);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.6,+0.3,0);

        glutSolidSphere(0.3,30,30);

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}

要用glutSolidCube(0.3)用兩次

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glTranslatef(-0.6,+0.3,0);

        glColor3f(1,0,0);///紅色的身體

        glutSolidCube(0.3);///方塊

    glPopMatrix();

    glPushMatrix();

        glTranslatef(+0.0,+0.3,0);

        glColor3f(0,1,0);///綠色的手臂

        glScalef(1.5,0.5,0.5);

        glutSolidCube(0.3);

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}


⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);

    glutSolidCube(0.3);

}

void myArm(){

    glColor3f(0,1,0);

    glScalef(1.5,0.5,0.5);

    glutSolidCube(0.3);

}

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);

        myArm();///把程式移上去

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}

⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-1修正版

#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);///紅色身體

    glutWireCube(0.6);

}

void myArm(){

    glColor3f(0,1,0);///綠色手臂

    glScalef(1.5,0.5,0.5);

    glutWireCube(0.3);

}

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);

        myArm();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutMainLoop();

}



⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-2_TRT_glutIdleFunc_rotate:

貼上week10-1的程式

加上 float angle=0

        glRotatef(angle,x,y,z) 

        glutIdleFunc(display);


#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);

    glutSolidCube(0.3);

}

void myArm(){

    glColor3f(0,1,0);

    glScalef(1.5,0.5,0.5);

    glutSolidCube(0.3);

}

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);

        myArm();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}


⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-2修正版

#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);

    glutWireCube(0.6);

}

void myArm(){

    glColor3f(0,1,0);

    glScalef(1.5,0.5,0.5);

    glutWireCube(0.3);

}

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);

        myArm();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();


}



⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-3_TRT_glRotatef_glTranslatef:

貼上week10-2的程式

在glRotatef()與myArm()中間新增一行glTranslate()

⇛移動旋轉中心

#include <GL/glut.h>

void myBody(){

    glColor3f(1,0,0);

    glutSolidCube(0.3);

}

void myArm(){

    glColor3f(0,1,0);

    glScalef(1.5,0.5,0.5);

    glutSolidCube(0.3);

}

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);

        glTranslatef(0.225,0,0);///把移度中心做移動

        myArm();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();

}

⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵
week10-3修改版
#include <GL/glut.h>
void myBody()
{
    glColor3f(1,0,0);
    glutWireCube(0.6);
}
void myArm()
{
    glColor3f(0,1,0);
    glScalef(1.5,0.5,0.5);
    glutWireCube(0.3);
}
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);
    glTranslatef(0.225,0,0);///把移度中心做移動
    myArm();
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}


⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-4_TRT_glTranslatef_glRotatef_glTranslatef:


#include <GL/glut.h>
void myBody(){
    glColor3f(1,0,0);
    glutWireCube(0.6);///變空心
}
void myArm(){
    glColor3f(0,1,0);
    glScalef(1.5,0.5,0.5);
    glutWireCube(0.3);///變空心
}
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.3,+0.3,0);///移動整個手臂
        glRotatef(angle++,0,0,1);
        glTranslatef(0.225,0,0);///把移度中心做移動
        myArm();
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}






week10-5_TRT_two_layers

#include <GL/glut.h>

void myBody()

{

    glColor3f(1,0,0);

    glutWireCube(0.6);///變空心

}

void myArm()

{

    glPushMatrix();///要加保護機制!!

        glColor3f(0,1,0);

        glScalef(1.5,0.5,0.5);

        glutWireCube(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.3,+0.3,0);///移動整個手臂

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

        glTranslatef(0.225,0,0);///把移度中心做移動

        myArm();

        glPushMatrix();///右手下手臂

            glTranslatef(+0.225,0,0);///移動整個下手臂

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

            glTranslatef(0.225,0,0);///把移度中心做移動

            myArm();

        glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week09-2 glutSolid¨t¦C");

    glutDisplayFunc(display);

    glutIdleFunc(display);

    glutMainLoop();



⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵

week10-6_TRT_left_right


#include <GL/glut.h>
void myBody()
{
    glColor3f(1,0,0);
    glutWireCube(0.6);///變空心
}
void myArm()
{
    glPushMatrix();///要加保護機制!!
        glColor3f(0,1,0);
        glScalef(1.5,0.5,0.5);
        glutWireCube(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.3,+0.3,0);///移動整個手臂
        glRotatef(angle++,0,0,1);
        glTranslatef(-0.225,0,0);///把移度中心做移動
        myArm();
        glPushMatrix();///左手下手臂
            glTranslatef(-0.225,0,0);///移動整個下手臂
            glRotatef(angle++,0,0,1);
            glTranslatef(-0.225,0,0);///把移度中心做移動
            myArm();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();///右手上手臂
        glTranslatef(+0.3,+0.3,0);///移動整個手臂
        glRotatef(angle++,0,0,1);
        glTranslatef(0.225,0,0);///把移度中心做移動
        myArm();
        glPushMatrix();///右手下手臂
            glTranslatef(+0.225,0,0);///移動整個下手臂
            glRotatef(angle++,0,0,1);
            glTranslatef(0.225,0,0);///把移度中心做移動
            myArm();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();

}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09-2 glutSolid¨t¦C");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();

}
⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵⤵
week10-7_TRT_mouse_motion_angle
貼上week10-6
=>把手臂自動旋轉改成用滑鼠拖曳
void motion(int x,int y)
{
    angle=x;
    glutPostRedisplay();///重畫畫面
}
在int main()裡加入glutMotionFunc(motion);

#include <GL/glut.h>
void myBody()
{
    glColor3f(1,0,0);
    glutWireCube(0.6);///變空心
}
void myArm()
{
    glPushMatrix();///要加保護機制!!
        glColor3f(0,1,0);
        glScalef(1.5,0.5,0.5);
        glutWireCube(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.3,+0.3,0);///移動整個手臂
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.225,0,0);///把移度中心做移動
        myArm();
        glPushMatrix();///左手下手臂
            glTranslatef(-0.225,0,0);///移動整個下手臂
            glRotatef(-angle,0,0,1);
            glTranslatef(-0.225,0,0);///把移度中心做移動
            myArm();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();///右手上手臂
        glTranslatef(+0.3,+0.3,0);///移動整個手臂
        glRotatef(angle,0,0,1);
        glTranslatef(0.225,0,0);///把移度中心做移動
        myArm();
        glPushMatrix();///右手下手臂
            glTranslatef(+0.225,0,0);///移動整個下手臂
            glRotatef(angle,0,0,1);
            glTranslatef(0.225,0,0);///把移度中心做移動
            myArm();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int x,int y)
{
    angle=x;
    glutPostRedisplay();///重畫畫面
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09-2 glutSolid¨t¦C");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();

}

























1 則留言: