2023年3月23日 星期四

week06 余

  Week06 -1-1

開啟一個新的GLUT專案

檔名為Week06-1_TRT_ROBOT2_TEAPOT

然後使用上周的week05-2程式來修改

程式修改如下

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.01, 30, 30);


    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.45,0, 0);
        glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");

glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
茶壺就會開始旋轉了

加入這行程式碼glTranslatef(0.5,0.5,0);

茶壺就會懸掛在那個位置了


Week06-2-1

今天的第二個程式再開啟一個新的GLUT專案

檔名為week06-2_TRT_robot3_hierarchy

程式碼刪掉用上週的程式碼來改

程式碼如下

#include <GL/glut.h>

float angle=0;

void myCube()

{

    glPushMatrix();

        glScalef(1,0.3,0.3);

        glutSolidCube(0.5);

    glPopMatrix();

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere(0.01,30,30);

    glPushMatrix();

        myCube();

    glPopMatrix();

    glutSwapBuffers();

    angle++;

}

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

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week06");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}

就會出現細長的小方塊了


加入

         glTranslatef(0.25,0,0);

        glRotatef(angle,0,0,1);

        glTranslatef(0.25,0,0);

讓它旋轉

然後再加入

glPushMatrix();

        glTranslatef(0.25,0,0);

        glRotatef(angle,0,0,1);

        glTranslatef(0.25,0,0);

        myCube();

        glPopMatrix();

讓他多一個手臂跟著旋轉



Week06-2-2
今天的第三個程式 開新專案檔名為week06-3_TRT_ROBOT4

複製今天的第二個程式碼並加入下列程式碼
glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.25,0,0);
        myCube();
        glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(-0.25,0,0);
        myCube();
        glPopMatrix();
    glPopMatrix();
主要就是更改座標 從正的改成負的
就會在對角處多出一條手臂了

Week06-2-3
今天的第四個程式    
開新專案檔名為week06-4_TRT_ROBOT5_mouse_motion_angle
程式碼如下
#include <GL/glut.h>
float angle=0;
void myCube()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);
        glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.01,30,30);

    glPushMatrix();
        glTranslatef(0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        myCube();
        glPushMatrix();
        glTranslatef(0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        myCube();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0,0);
        myCube();
        glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0,0);
        myCube();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
void motion(int x,int y)
{
    angle = x;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
    glutMotionFunc(motion);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
就會出現兩個手臂並可以用滑鼠去揮動他(改變他的位置)

Week06-3-1
第三節課老師讓我們練習期中考考題
網址:https://jsyeh.org/gl/
答案為:
1.  glPushMatrix();//備份矩陣
2.  glTranslatef(x,y,z);平移
3.  glRotatef(angle,x,y,z);旋轉
4.  glScalef(x,y,z);縮放
5.  glBegin(GL_POLYGON);開始畫
6.  glNormal3f(x,y,z);打光的法向量
7.  glTexCoord2f(x,y);貼圖座標
8.  glColor3f(x,y,z);色彩
9.  glVertex3f(x,y,z);頂點
10. glEnd();結束
11. glPopMatrix();還原矩陣
多加練習
Week06-3-2
然後再稍微修改06-2-3的程式
就會變成用滑鼠左右滑動會揮動更快了
全部的程式碼如下:
#include <GL/glut.h>
float angle=0;
void myCube()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);
        glutSolidCube(0.5);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.01,30,30);

    glPushMatrix();
        glTranslatef(0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        myCube();
        glPushMatrix();
        glTranslatef(0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        myCube();
        glPopMatrix();
    glPopMatrix();

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

    glutSwapBuffers();
}
int oldX=0;
void mouse(int button,int state,int x,int y)
{
    oldX = x;
}
void motion(int x,int y)
{
    angle += (x-oldX);
    oldX = x;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");

    glutMotionFunc(motion);
    glutMouseFunc(mouse);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}

最後在上傳到GITHUB
cd desktop
git clone https://github.com/dannyyu0521/2023graphicsb
cd 2023graphicsb
將檔案放入資料夾
git status
git add .
git status
git config --global user.email dannyyyu0521@gmail.com
git config --global user.name dannyyu0521
git commit -m "add week06"


今天的課程結束~~

沒有留言:

張貼留言