2020年4月21日 星期二

Week08製作關節

 期中小考 

1. glPushMatrix();備份矩陣                                    7. glEnd();結束畫

2. glPopMatrix();還原矩陣                                      8. glColor(R,G,B);顏色

3. glTranslatef(x,y,z);移動                                        9. glTexcoord2f(tx,ty);貼圖座標

4. glRotatef(角度,x,y,z);旋轉                                   10. glNomal3f(nx,ny,nz);打光的法向量

5. glScalef(x,y,z);縮放                                              11. glVertex2f(x,y);頂點

6. glBegin(GL_POLYGUN);開始畫

 程式碼結構解釋 

glutSolid(實心)+形狀(...);

EX:

      glutSolidSphere(1半徑,slices直切分段,stacks橫切分段);

      glutSolidCone(1半徑,1高度,slices直切分段,stacks橫切分段);

      glutSolidTorus(1小圓,1大圓,slices直切分段,stacks橫切分段);

glutWire(非實心)+形狀(...);

 旋轉圖形製作關節 

 




示意圖

(0.0)為軸心
#include <GL/glut.h>
void upper_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.5,0.5,0);//由下面往上做所以最後把旋轉的以下所有東西移到(0.5,0.5)的地方
        glRotatef(angle, 0,0,1);//以z軸旋轉
        glTranslatef(0.25,0,0);//由下面往上做所以會先移動把軸心以x軸移動0.25 
        upper_arm();
    glPopMatrix();

    angle++;

    glutSwapBuffers();
}
int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week09");

    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();
}



以另一個矩陣做軸心


#include <GL/glut.h>
void upper_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.23,0,0);
        glRotatef(-angle, 0,0,1);
        glTranslatef(-0.25,0,0);
        glColor3f(0,1,0);
        upper_arm();

        glPushMatrix();
             glTranslatef(-0.26,0,0);
             glRotatef(-angle, 0,0,1);
             glTranslatef(-0.25,0,0);
             glColor3f(1,1,0);
             upper_arm();
        glPopMatrix();
    glPopMatrix();///右邊

   glPushMatrix();
        glTranslatef(-0.23,0,0);
        glRotatef(-angle, 0,0,1);
        glTranslatef(-0.25,0,0);
        glColor3f(0,1,0);
        upper_arm();

        glPushMatrix();
             glTranslatef(-0.26,0,0);
             glRotatef(-angle, 0,0,1);
             glTranslatef(-0.25,0,0);
             glColor3f(1,1,0);
             upper_arm();
        glPopMatrix();
    glPopMatrix();///左邊

    angle++;

    glutSwapBuffers();
}
int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week09");

    glutIdleFunc(display);

    glutDisplayFunc(display);

    glutMainLoop();
}


沒有留言:

張貼留言