2020年4月22日 星期三

白天上課!晚上讀書!假日批判!

認識圖形程式

glSolidCone >球
glSolidTorus >圓錐
glSolidSphere >圓環
每個都可以控制移動方向大小

自定義圖形

畫出個長方形

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1,0,0);                              顏色
        glScalef(0.5,0.2,0.2);                        縮放大小
        glutSolidCube(1);                             變出一個方塊
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 09");
    glutDisplayFunc(display);
    glutMainLoop();
}

變成簡單的程式 在加個黃色長方形

#include <GL/glut.h>
void myCube()                                              自己加個函式
{
    glPushMatrix();
        glScalef(0.5,0.2,0.2);
        glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glPushMatrix();
      glColor3f(1,0,0);
        myCube();                                         呼叫自己設的函式
        glTranslatef(0.4,0.1,0);                     第二個方塊設完條件在呼叫方塊
        glColor3f(1,1,0);
        myCube();                                        呼叫方塊
      glPopMatrix();
      glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 09");
    glutDisplayFunc(display);
    glutMainLoop();
}

圖形轉動

#include <GL/glut.h>
void myCube()
{
        glPushMatrix();
        glColor3f(1,0,0);                        顏色改來這所以每次都是紅色長方形
        glScalef(0.5,0.2,0.2);
        glutSolidCube(1);
       glPopMatrix();
}
float angle=0;                                     轉動變數角度
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle, 0,0,1);              轉動
        myCube();

    glPopMatrix();
    angle++;                                         每次轉動增加
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 09");
    glutIdleFunc(display);                    有閒置的時候重新再做動作 (Idle閒置)
    glutDisplayFunc(display);
    glutMainLoop();
}

選擇原點做旋轉

#include <GL/glut.h>
void myCube()
{
    glPushMatrix();
        glColor3f(1,0,0);
        glScalef(0.5,0.2,0.2);
        glutSolidCube(1);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle, 0,0,1);
        glTranslatef(0.5,0,0);                       可以選擇轉動的點(例如是0就是中心,0.5就是物體為   
        myCube();                                        中心正0.5的點為中心旋轉

    glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

進階手臂旋轉 TRT

#include <GL/glut.h>
void myCube()
{
    glPushMatrix();
        glColor3f(1,0,0);
        glScalef(0.5,0.2,0.2);
        glutSolidCube(1);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(0,1,0);                                     
    glutSolidCube(0.6);                          新增一個綠色方塊(身體)
    glPushMatrix();
        glTranslatef(0.3,0.3,0);                 先把手臂掛到右上角的移動
        glRotatef(angle, 0,0,1);
        glTranslatef(0.22,0,0);                  後面的移動前面接著Rotate所以這個移動是轉動中心位置
        myCube();

    glPopMatrix();
    angle++;
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}


















































沒有留言:

張貼留言