2020年4月21日 星期二

week08

week08

今天的考試!!!!!
glPushMatrix();//備份矩陣 
 glTranslatef(x,y,z);//移動 
 glRotatef(angle,x,y,z);//轉動 
 glScalef(x,y,z);//縮放
 glBegin(GL_POLYGON);//開始畫 
 glColor3f(r,g,b);//⾊彩 
 glTexCoord2f(tx,ty);//貼圖座標 
 glNormal3f(nx,ny,nz);//打光的法向量 
 glVertex2f(x,y);//頂點
 glEnd();//結束畫 
glPopMatrix();//還原矩陣 



*Solid  實心的

glutSolidSphere(          1,slices,stacks);  ==>  圓球
                           圓的半徑
glutSolidCone(                   1,             1,slices,stacks); ==>   圓錐
                       錐體底面的半徑    錐體高度
glutSolidTorus(           0.2,              0.8,slices,stacks); ==>   甜甜圈
                           外圈的半徑    內圈的半徑


這張圖我改的是glutSolidSphere(圓球),我把他的半徑變小,改成1
印出一個實心的方體

程式碼:
#include <Gl/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH);
    glutSolidCube(0.5);///實心方體
    glutSwapBuffers();
}

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

    glutDisplayFunc(display);
    glutMainLoop();
}
劃出長方體

程式碼:
#include <Gl/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH);

    glPushMatrix();///備份
        glScalef(1,0.3,0.3);///放大縮小,x不變,y、z都變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原

    glutSwapBuffers();
}

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

    glutDisplayFunc(display);
    glutMainLoop();

}
寫一個讓方形旋轉的程式,以中心為圓點旋轉

程式碼:
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);///放大縮小,x不變,y、z都變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glRotatef(angle,0,0,1);///對z軸旋轉
        upper_arm();///用函式呼叫自己寫的程式
    glPopMatrix();///還原
    angle++;
    glutSwapBuffers();
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week08");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}



程式碼:
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();///備份
        glScalef(1,0.3,0.3);///放大縮小,x不變,y、z都變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glTranslatef(0,0,0);///初始位置在(0,0,0)
        glRotatef(angle,0,0,1);///對z軸旋轉
        glTranslatef(0.25,0,0);///長方體中的中心改為(0.25,0,0),此點為旋轉的中心(改變旋轉半徑)
        upper_arm();///畫手
    glPopMatrix();///還原
    angle++;
    glutSwapBuffers();
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week08");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();

}
*改變整個方形的位置*
與前一張差在於 glTranslatef(0.5,0.5,0);,改變位置
程式碼:
#include <Gl/glut.h>
void upper_arm()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);///放大縮小,x不變,y、z都變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glTranslatef(0.5,0.5,0);
        glRotatef(angle,0,0,1);///對z軸旋轉
        glTranslatef(0.25,0,0);
        upper_arm();///畫手
    glPopMatrix();///還原
    angle++;
    glutSwapBuffers();
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week08");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();

}
劃出一隻手臂,上顏色

程式碼:
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);///放大縮小,x不變,y、z都變0.3
        glutSolidCube(0.5);
    glPopMatrix();///還原
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份
        glTranslatef(0.3,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(1,0,0); arm();///畫手,上顏色(紅)

    glPushMatrix();
        glTranslatef(0.3,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(1,1,0); arm();///畫手,上顏色(黃)
    glPopMatrix();

    glPopMatrix();
    angle++;
    glutSwapBuffers();
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week08");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();

}
*劃出兩隻手繞圈圈*
程式碼:
#include <Gl/glut.h>
void arm()
{
    glPushMatrix();
        glScalef(1,0.3,0.3);
        glutSolidCube(0.5);
    glPopMatrix();
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///右手
        glTranslatef(0.2,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(1,0,0); arm();///畫紅色的上手臂

    glPushMatrix();
        glTranslatef(0.25,0,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        glColor3f(1,1,0); arm();///畫黃色的下手臂
    glPopMatrix();///還原
    glPopMatrix();///還原

    glPushMatrix();///左手
        glTranslatef(-0.2,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0,0);
        glColor3f(1,0,0); arm();///畫紅色的上手臂

    glPushMatrix();
        glTranslatef(-0.25,0,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0,0);
        glColor3f(1,1,0); arm();///畫黃色的下手臂
    glPopMatrix();///還原
    glPopMatrix();///還原


    glPopMatrix();
    angle++;
    glutSwapBuffers();
}

沒有留言:

張貼留言