2021年5月24日 星期一

是我是我詐騙 Week14

 

⏰ TIMER ⏰


1.劃出簡單的圓球


程式碼如下:

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.3,30,30);  ///0.3是半徑,實心的圓球
    glutSwapBuffers();
}

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

    glutMainLoop();
}


2.啟動計時器



程式碼如下:

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidSphere(0.3,30,30);
    glutSwapBuffers();
}
void timer(int t)
{
    glClearColor(1,0,0,0);///紅色的
    display();
}

int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutTimerFunc(4000,timer,0); 
    ///4000=>要等多久,timer=>叫誰,0=>參數
    glutMainLoop();
}


3.縱切橫切


程式碼如下:

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutWireSphere(0.3,12,5); ///Wire變成線,改變縱切橫切

    glutSwapBuffers();
}
void timer(int t)
{
    glClearColor(1,0,0,0);
    display();
}

int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutTimerFunc(4000,timer,0);
    glutMainLoop();
}


4.轉動的方塊



程式碼如下:

#include <GL/glut.h>
int angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidCube(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void timer(int t)
{
    glutTimerFunc(30,timer,t+1);
    angle++;
    display();
}

int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutTimerFunc(4000,timer,0);
    glutMainLoop();
}

5.方塊轉過去轉回來



程式碼如下:

#include <GL/glut.h>
int angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidCube(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int diff=2;
void timer(int t)
{
    glutTimerFunc(30,timer,t+1);
    angle+=diff;  
    if(angle>180)diff=-diff;
    if(angle<0)diff=-diff;
    ///利用angle+=diff的方法,配合if()調整diff的正負號
    display();
}

int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutTimerFunc(4000,timer,0);
    glutMainLoop();
}


6.手臂方塊



程式碼如下:

#include <GL/glut.h>
int angle=0;
void drawArm1()
{
    glPushMatrix();
            glScalef(1,0.5,0.5);
            glColor3f(1,0,0);   ///左手是紅色
            glutSolidCube(0.3);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glColor3f(1,1,1);
        glutSolidCube(0.4);
        glPushMatrix();
            glTranslatef(-0.2,+0.2,0);  ///掛到右上角
            glRotatef(angle,0,0,1);  ///轉動
            glTranslatef(-0.15,0,0); 
            ///把旋轉中心的關節軸,放在正中心
            drawArm1();
        glPopMatrix();

    glPopMatrix();
    glutSwapBuffers();
}
int diff=2;
void timer(int t)
{
    glutTimerFunc(30,timer,t+1);
    angle+=diff;
    if(angle>90||angle<0)diff=-diff;
    display();
}

int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutTimerFunc(0,timer,0);
    glutMainLoop();
}



 作業4 



程式碼如下:



#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
#include "glm.h"///使用外掛

GLMmodel*pmodel1=NULL;
GLMmodel*head=NULL;
GLMmodel*handl=NULL;
GLMmodel*handr=NULL;
GLMmodel*legl=NULL;
GLMmodel*legr=NULL;
GLMmodel*body=NULL;

const GLfloat light_ambient[]  = { 1.0f, 1.0f, 1.0f, 10.0f };
const GLfloat light_diffuse[]  = { 10.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 2.0f, 2.0f, 2.0f, 2.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

GLuint id1, id2;
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename);
    cvCvtColor(img,img, CV_BGR2RGB);
    glEnable(GL_TEXTURE_2D);
    GLuint id;
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
    return id;
}
float angle=0;
float anglehl=10;
float anglehr=10;
float anglefl=-10;///初始角度=0
float anglefr=10;///初始角度=0

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBindTexture(GL_TEXTURE_2D, id1);

    glPushMatrix();
        glTranslatef(0,-0.3,0);
        glRotatef(180,0,1,0);
        glScalef(0.2,0.2,0.2);
        glmDraw(head,GLM_SMOOTH|GLM_TEXTURE);
    glPopMatrix();

    glPushMatrix();
        glTranslatef(0,-0.3,0);
        glRotatef(180,0,1,0);
        glScalef(0.2,0.2,0.2);
        glmDraw(body,GLM_SMOOTH|GLM_TEXTURE);
    glPopMatrix();

    glPushMatrix();
        glTranslatef(0,-0.05,0.2);
        glRotatef(anglehl,0,0,1);
        glTranslatef(-0.18,-0.35,0.1);
        glScalef(0.25,0.2,0.2);
        glmDraw(handl,GLM_SMOOTH|GLM_MATERIAL);
    glPopMatrix();

    glPushMatrix();
        glTranslatef(0,0,0.2);
        glRotatef(anglehr,0,0,1);
        glTranslatef(0.25,-0.4,-0.1);
        glScalef(0.25,0.2,0.2);
        glmDraw(handr,GLM_SMOOTH|GLM_MATERIAL);
    glPopMatrix();

    glPushMatrix();
        glTranslatef(0,0,0.2);
        glRotatef(anglefl,1,0,0);
        glTranslatef(0,-0.3,0);
        glScalef(0.2,0.2,0.2);
        glmDraw(legl,GLM_SMOOTH|GLM_MATERIAL);
    glPopMatrix();

    glPushMatrix();
        glTranslatef(0,0,0.2);
        glRotatef(anglefr,1,0,0);
        glTranslatef(0,-0.3,0);
        glScalef(0.2,0.2,0.2);
        glmDraw(legr,GLM_SMOOTH|GLM_MATERIAL);
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, id2);
    glBegin(GL_POLYGON);
        glTexCoord2f( 0, 0 ); glVertex3f( -1, +1 ,0.8);
        glTexCoord2f( 0, 1 ); glVertex3f( -1, -1 ,0.8);
        glTexCoord2f( 1, 1 ); glVertex3f( +1, -1 ,0.8);
        glTexCoord2f( 1, 0 ); glVertex3f( +1, +1 ,0.8);
    glEnd();
    glutSwapBuffers();
    anglehl+=1;
    anglehr+=1;
    anglefl+=1;
    anglefr+=1;
    if(anglefl>25)anglehr=-anglehr;
    if(anglefr>25)anglehl=-anglehl;
    if(anglefl>25)anglefl=-anglefl;
    if(anglefr>25)anglefr=-anglefr;
}
int main(int argc, char** argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("08160554");
    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    id1 = myTexture("Diffuse.jpg");
    id2 = myTexture("bg.jpg");
    body=glmReadOBJ("body.obj");
    head=glmReadOBJ("head.obj");
    handl=glmReadOBJ("handl.obj");
    handr=glmReadOBJ("handr.obj");
    legl=glmReadOBJ("legl.obj");
    legr=glmReadOBJ("legr.obj");

    glEnable(GL_DEPTH_TEST);
    glutMainLoop();
}









沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...