2024年4月22日 星期一

week10電腦圖學

 week10電腦圖學

##week10-0_sample

0.安裝freeglut, 改libfreeglut.a複製成libglut32.a

1.File-New-Project ,GLUT專案,week10-0_sample


##week10-1_TRT_glutSolidCube_myBody_myArm

1.File-New-Project ,GLUT專案,week10-1_TRT_glutSolidCube_myBody_myArm

2.貼上上週的week09-2的程式

3.藥用glutSolidCube(0.3)用兩次,紅色的身體,綠色手臂

目標:用方塊,放到void myBody() 函式裡

- 把身體的程式,放到void myBody()函示

- 把手臂的程式,放到void myArm()函示

#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();
}



##week10-2_TRT_glutIdleFunc_rotate

1.File-New-Project ,GLUT專案,week10-2_TRT_glutIdleFunc_rotate

2.貼上week10-1的程式

3.加上float angle=0; 加上glRotatef(angle++,0,0,1); glutIdelFunc(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-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-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

1.File-New-Project ,GLUT專案,week10-5_TRT_two_layers

2.貼上week10-4程式

3.在畫手臂的下一行

#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

1.File-New-Project ,GLUT專案,week10-6_TRT_left_right

2.貼上week10-5的程式

#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();
}



沒有留言:

張貼留言