2021年6月15日 星期二

張淳雅_Week06

旋轉、連接

1. 先將上週程式碼簡化,畫一個方塊
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glutSolidCube(1);///畫個方塊
    glPopMatrix();
    glutSwapBuffers();
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);///有空就重畫畫面
    glutMainLoop();
}

2. 加入轉動角度
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);///對中心轉甕
        glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

3. 調整大小顏色
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glScalef(0.5, 0.1, 0.1);///大小
        glColor3f(0,0,1);///顏色
        glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

3. 移動重心
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);///把關節移到中間
        glScalef(0.5, 0.1, 0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

4. 旋轉的藍色手臂(?
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
    glPushMatrix();
        glScalef(0.5, 0.1, 0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix();
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);    glutSolidCube(1);///身體
    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);///(3)中心移到右上角掛著
        glRotatef(angle, 0, 0, 1);///(2)對中心轉動
        glTranslatef(0.25, 0, 0);///(1)關節移到中間
        hand();///藍色方塊
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

5.
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
    glPushMatrix();
        glScalef(0.5, 0.1, 0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);    glutSolidCube(0.5);///縮小一點比較好看效果
    glPushMatrix();///右半邊
        glTranslatef(0.25, 0.25, 0);///因為白色方塊大小改變,位置也跟著改變
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        hand();///藍色方塊1(連著白色方塊)
        glPushMatrix();
            glTranslatef(0.25, 0, 0);///(3)
            glRotatef(angle, 0, 0, 1);///(2)
            glTranslatef(0.25, 0, 0);///(1)
            hand();///藍色方塊2(連著藍色方塊1)
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle+=0.05;///轉動速度調整
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

6. 做一個左邊的
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
    glPushMatrix();
        glScalef(0.5, 0.1, 0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);    glutSolidCube(0.5);
    glPushMatrix();///右半邊
        glTranslatef(0.25, 0.25, 0);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(0.25, 0, 0);
        hand();
        glPushMatrix();
            glTranslatef(0.25, 0, 0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            hand();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///左半邊
        glTranslatef(-0.25, 0.25, 0);
        glRotatef(angle, 0, 0, 1);
        glTranslatef(-0.25, 0, 0);
        hand();
        glPushMatrix();
            glTranslatef(-0.25, 0, 0);
            glRotatef(+-angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            hand();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    angle+=0.05;
}

int main(int argc, char ** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160173張淳雅O.O");

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}
    (角度不變: glRotatef(+angle, 0, 0, 1);)
(反方向旋轉角度: glRotatef(-angle, 0, 0, 1);)

沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...