2015年3月26日 星期四

02160056簡瑜萱week5

電腦圖學
1)自製3D模型

2)利用mouse旋轉

3)回家作業

1載freeglut,(codeblocks,libglut32.a)
上週的glutWireTorus(0.3,0.7,30,30)

會旋轉的甜甜圈
#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRotatef(angle,0,1,0);
    glutWireTorus(0.3,0.7,30,30);
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutMainLoop();
}




加glPushMatrix();
    glPopMatrix();速度變慢

2D正方形


#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    //glRotatef(angle,0,1,0);
    glBegin(GL_LINE_LOOP);
    glVertex2f(0.2,0.2);//2D
    glVertex2f(0.2,-0.2);
    glVertex2f(-0.2,-0.2);
    glVertex2f(-0.2,0.2);
    glEnd();
    glPopMatrix();
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutMainLoop();
}



3D旋轉正方形


#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0,1,0);
    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,0.2,0.8);
    glEnd();

    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,0.2,0.8);
    glEnd();

    glPopMatrix();
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}



3D旋轉長方體
用POLYGON和QUAD_STRIP做出一立體長方形

#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,0,0);
    glPushMatrix();
    glRotatef(angle,0,1,0.4);
    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,0.2,0.8);
    glEnd();

    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);
     glVertex3f(-0.2,0.2,-0.8);
    glEnd();

    glBegin(GL_QUAD_STRIP);//四邊形構成彩帶
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);

     glVertex3f(-0.2,0.2,0.8);
     glVertex3f(-0.2,0.2,-0.8);
     glEnd();


    glPopMatrix();
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}




3D透明旋轉長方體加黑線
延用上一個程式加上黑線讓他看得更清楚
#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,0,0);前面是畫面
    glPushMatrix();
    glRotatef(angle,0,1,0.4);
    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,0.2,0.8);
    glEnd();

    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);
     glVertex3f(-0.2,0.2,-0.8);
    glEnd();

    glBegin(GL_QUAD_STRIP);/四邊形構成彩帶
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);

     glVertex3f(-0.2,0.2,0.8);
     glVertex3f(-0.2,0.2,-0.8);
     glEnd();
     ///後面是線
     glColor3f(0,0,0);
    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,0.2,0.8);
    glEnd();

    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);
     glVertex3f(-0.2,0.2,-0.8);
    glEnd();

    glBegin(GL_LINES);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);

     glVertex3f(-0.2,0.2,0.8);
     glVertex3f(-0.2,0.2,-0.8);
     glEnd();


    glPopMatrix();
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}



3D透明旋轉三角柱加黑線
改顏色並刪掉四邊形一個點座標即可形成
#include<GL/glut.h>

float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,1,0);
    glPushMatrix();
    glRotatef(angle,0,1,0.4);
    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);

    glEnd();

    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);

    glEnd();

    glBegin(GL_QUAD_STRIP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);


     glEnd();
     ///後面是線
     glColor3f(0,0,0);
    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);

    glEnd();

    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);

    glEnd();

    glBegin(GL_LINES);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);


     glEnd();


    glPopMatrix();
    glFlush();
    angle+=0.01;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}



滑鼠控制轉動
glutmotion(motion)//控制滑鼠移動
glutmouse(mouse)//滑鼠按和放開
#include<GL/glut.h>
#include<stdio.h>
float angle=0,angle2=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(angle,0,1,0);
    glRotatef(angle2,1,0,0);
    glColor3f(0,1,0);
    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);

    glEnd();

    glBegin(GL_POLYGON);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);

    glEnd();

    glBegin(GL_QUAD_STRIP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);


     glEnd();
     ///後面是線
     glColor3f(0,0,0);
    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,0.8);

    glEnd();

    glBegin(GL_LINE_LOOP);
     glVertex3f(0.2,0.2,-0.8);
     glVertex3f(0.2,-0.2,-0.8);
     glVertex3f(-0.2,-0.2,-0.8);

    glEnd();

    glBegin(GL_LINES);
     glVertex3f(0.2,0.2,0.8);
     glVertex3f(0.2,0.2,-0.8);

     glVertex3f(0.2,-0.2,0.8);
     glVertex3f(0.2,-0.2,-0.8);

     glVertex3f(-0.2,-0.2,0.8);
     glVertex3f(-0.2,-0.2,-0.8);


     glEnd();


    glPopMatrix();
    glFlush();
    ///angle+=0.01;
}
void motion(int x, int y)
{
    printf("%d %d\n",x,y);
    angle=x;
    angle2=y;
}
int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160056簡瑜萱");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}









沒有留言:

張貼留言