顯示具有 02160704_王庭翊 標籤的文章。 顯示所有文章
顯示具有 02160704_王庭翊 標籤的文章。 顯示所有文章

2015年6月10日 星期三

02160704王庭翊



1移動轉動
2寫檔讀檔
3內插動作
4期末作品


今天上課一開始先複習移動跟轉動,再來是讀檔,最後的內插是這學期的大魔王
不愧是大魔王有點難啊,但打敗他就可以結束這學期了哈哈哈
接下來就要努力把期末作品完成了



#include <GL/glut.h>
#include<stdio.h>
FILE * fout=NULL;
FILE * fin=NULL;
float angle[10]={}, oldX=0, oldY=0;
int angleID=1;
void drawBody(){
    glPushMatrix();
    glScalef(1, 0.5, 0.5);
    glutSolidCube(1);
    glPopMatrix();
}
void drawArm(){
    glPushMatrix();
    glScalef(0.6, 0.3, 0.3);
    glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    { ///Lighting
    glColor3ub(100,132,100);
    GLfloat pos[]={0, 0, -1, 0};
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_LIGHT0);
    //glEnable(GL_LIGHTING);
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    }
    glPushMatrix();
        glTranslatef(0.5, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
        glRotatef(angle[1], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
        glTranslatef(0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
        drawArm();///這是個Arm ver 1  Right Upper Arm
        glPushMatrix();
            glTranslatef(0.25, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
            glRotatef(angle[2], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
            glTranslatef(0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
            drawArm(); ///Right Lower Arm
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();
        glTranslatef(-0.5, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
        glRotatef(-angle[3], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
        glTranslatef(-0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
        drawArm();///這是個Arm ver 1  Left Upper Arm
        glPushMatrix();
            glTranslatef(-0.25, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
            glRotatef(-angle[4], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
            glTranslatef(-0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
            drawArm(); ///Left Lower Arm
        glPopMatrix();
    glPopMatrix();
    drawBody();
    glFlush();
}
void motion(int x, int y)
{   angle[angleID] -= y - oldY;
    oldY=y; oldX=x;

    if(fout==NULL) fout=fopen("a.txt","w+");
    for(int i=0;i<5;i++)
    {
        printf(   "%f ",angle[i]);
        fprintf(fout,"%f ",angle[i]);
    }
    printf("\n");
    fprintf(fout,"\n");
}
void mouse(int button, int state, int x, int y){
    if(state==GLUT_DOWN) { oldX=x; oldY=y; }
}
void timer(int t)
{
    glutTimerFunc(500, timer, t+1);
    if(fin==NULL)fopen("a.txt","r");
    for(int i=0;i<5;i++)
    {
         fscanf(fin,"%f",&angle[i]);
        printf("%f ",angle[i]);
    }
    glutPostRedisplay();
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')angleID=1;
    if(key=='2')angleID=2;
    if(key=='3')angleID=3;
    if(key=='4')angleID=4;
    if(key=='p')glutTimerFunc(10,timer,0);
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("T-R-T test");
    glutDisplayFunc(display);
    glutTimerFunc(20, timer, 0);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}














2015年6月3日 星期三

week15_王庭翊_02160704

                                                           今日課程進度


                                                           1 複習T-R-T及pushMatrix  PopMatrix
                                                           2 期末作品
                                                           3 建出全身關節
                                                           4 滑鼠鍵盤操控動作
                                                           5 存檔播放Play


 今天做了機器人的關節移動,配合滑鼠跟鍵盤
還加上使用fprintf來儲存檔案,有點難度ㄚㄚㄚ
所以回去要練習






手臂
#include <GL/glut.h>
float angle=0, oldX=0, oldY=0;
void drawBody(){
    glPushMatrix();
    glScalef(1, 0.5, 0.5);
    glutSolidCube(1);
    glPopMatrix();
}
void drawArm(){
    glPushMatrix();
    glScalef(0.6, 0.3, 0.3);
    glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    { ///Lighting
    glColor3ub(166,132,100);
    GLfloat pos[]={0, 0, -1, 0};
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    }
    glPushMatrix();
        glTranslatef(0.5, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
        glRotatef(angle, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
        glTranslatef(0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
        drawArm();///這是個Arm ver 1  Right Upper Arm
        glPushMatrix();
            glTranslatef(0.25, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
            glRotatef(angle, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
            glTranslatef(0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
            drawArm(); ///Right Lower Arm
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();
        glTranslatef(-0.5, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
        glRotatef(-angle, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
        glTranslatef(-0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
        drawArm();///這是個Arm ver 1  Left Upper Arm
        glPushMatrix();
            glTranslatef(-0.25, 0, 0);///最後一步, 把樓下的 "會對Arm Joint做旋轉的東西" 再移到右上 掛上去 ver 4
            glRotatef(-angle, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
            glTranslatef(-0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
            drawArm(); ///Left Lower Arm
        glPopMatrix();
    glPopMatrix();
    drawBody();
    glFlush();
}
void motion(int x, int y)
{   angle -= y - oldY;
    oldY=y; oldX=x;
}
void mouse(int button, int state, int x, int y){
    if(state==GLUT_DOWN) { oldX=x; oldY=y; }
}
void timer(int t)
{
    glutTimerFunc(20, timer, t+1);
    //angle++;
    glutPostRedisplay();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("T-R-T test");
    glutDisplayFunc(display);
    glutTimerFunc(20, timer, 0);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutMainLoop();
}





robot
#include <GL/glut.h>
#include <stdio.h>
float x1=-0.4, y1=0, x2=0, y2=0, angle=0;
void display()
{
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(x1, y1, 0);//要掛在哪裡?
        glRotatef(angle, 0,0,1);
        glTranslatef(-0.25, -0.11, 0);
        glColor3f(1,1,0);
        glutSolidTeapot(0.2);
    glPopMatrix();
    glPushMatrix();
        glTranslatef(x2, y2, 0);
        glColor3f(1,0,0);
        glutSolidTeapot(0.2);
    glPopMatrix();
    glFlush();///先不用 glutSwapBuffers(); 配合 glutInitDisplayMode(GLUT_DOUBLE);
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='1') x1+=0.1;
    if(key=='2') x1-=0.1;
    if(key=='3') y1+=0.1;
    if(key=='4') y1-=0.1;
    if(key=='5') angle+=10;
    if(key=='6') angle-=10;
    printf("%f %f\n", x1, y1);
    glutPostRedisplay();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("Robot3D");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}








2015年5月27日 星期三

02160704_王庭翊


今日上課
1.期末作品
2.會跳舞的機器人
3.T-R-T關節旋轉
4.作業問題示範解說
5.臨時小考T-R-T觀念


今天老師介紹了期末作品要交的作業內容,覺得蠻有趣的但也覺得好像蠻困難的感覺
最近老師上課的截圖都有用小畫家在旁邊做註解這樣讓人比較好理解。






2015年5月20日 星期三

02160704 王庭翊



今天做出了跟一開始上課開出的程式一樣東西,覺得蠻有成就感的



#include <GL/glut.h>
float eyeX=-100,eyeY=80,eyeZ=-200;

void display()
{   GLfloat pos[]={0,0,200,0};
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);

    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
      gluLookAt(eyeX,eyeY,eyeZ, 0,0,0,0,1,0);
      glPushMatrix();
      glutSolidTeapot(100);
     glPopMatrix();
    glPopMatrix();
    glFlush();
}

void motion(int x,int y)
{
    eyeX=x-400;eyeY=300-y;
    glutPostRedisplay();
}
void reshape(int w, int h)
{
    glViewport(0,0, w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-w/2,w/2, -h/2,h/2,-1000,1000);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}
void timer(int t)
{
    glutTimerFunc(20,timer,t+1);
    eyeX+=2;
    if(eyeX>300) eyeY+=4;
    glutPostRedisplay();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitWindowSize(800,600);
    glutCreateWindow("3D");
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMotionFunc(motion);
    glutTimerFunc(0,timer,0);
glViewport(0,0,800,600);
    glMatrixMode(GL_PROJECTION);
    glOrtho(-400,400,-300,300,-1000,1000);
    glMatrixMode(GL_MODELVIEW);

    glutMainLoop();
}

2015年5月13日 星期三

02160704王庭翊


今日一個不小心晚到了點,所以一開始沒有跟上進度哈哈
但後來因為老師這次的截圖很詳細,所以很快的就趕上來了
完成很帥的車屁屁


老師上課所示範的皮卡丘打排球~
學到更多的技巧壓~~



#include "glm.h"
GLMmodel* pmodel = NULL;

void display()
{
    GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);

    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glFlush();
}

int main(int argc, char**argv)
{
    pmodel = glmReadOBJ("porsche.obj");
    glmUnitize(pmodel);
    glmFacetNormals(pmodel);
    glmVertexNormals(pmodel, 90.0);


    glutInit(&argc, argv);
    glutCreateWindow("GLUT");
    glutDisplayFunc(display);
    glutMainLoop();
}


2015年5月6日 星期三

02160704_王庭翊,week11

今天老師所教的是利用上次的旋轉檔案加上timmer來達到使地球等速旋轉
而今天因為不熟練操作所以卡了好久的時間但好險在最後也完成了



#include <opencv/highgui.h> ///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()
#include <GL/glut.h> ///3D glut
#include <stdio.h>
float angle=0; ///自動轉很帥
GLUquadric * quad;
void display()
{   glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///自動轉很帥
        glRotatef(90, 1,0,0);
        glRotatef(angle, 0,0,1);///自動轉很帥
        gluQuadricTexture(quad, 1);
        gluSphere(quad, 0.5, 30, 30); ///glutSolidTeapot(0.3);
    glPopMatrix();///自動轉很帥
    glFlush();
    angle+=1;///自動轉很帥
}
void myInit()
{
    quad = gluNewQuadric();
    IplImage * img = cvLoadImage("image.jpg"); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
    glGenTextures(1, &id); /// 產生Generate 貼圖ID
    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
void timer(int t)
{/// 1000 msec   50fps:20msec
    glutTimerFunc(20, timer, 0);
    //printf("timer now\n");
    glutPostRedisplay();
}
int main(int argc, char**argv)
{   glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display); ///顯示
    //glutIdleFunc(display);///自動轉很帥 (閒閒沒事幹, 就重畫)
    glutTimerFunc(0, timer, 0);

    myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    glutMainLoop();
}





老師在最後做了一個類似憤怒鳥的小遊戲,原來我們常玩的遊戲可以利用codeblocks來做出來
當然老師作起來感覺很快也沒用到很難的觀念,但實際操作起來其實是蠻有難度的所以我們要更加的熟練才行


2015年4月29日 星期三

王庭翊 week10





期中考過後可能是有段時間沒碰程式,所以一開始做貝殼設定那些用的很不順,加上這次的東西比起之前難度更高,所以在操作上卡卡的。後來問了學長跟照著老師的截圖慢慢地打後來終於完成了課堂任務。這次將2D跟3D座結合超酷的!!!!



#include <opencv/highgui.h> ///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()
#include <GL/glut.h> ///3D glut
float angle=0; ///自動轉很帥
void display()
{   glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///自動轉很帥
        glRotatef(angle, 0,1,0);///自動轉很帥
        glutSolidTeapot(0.3);
    glPopMatrix();///自動轉很帥
    glFlush();
    angle+=0.1;///自動轉很帥
}
void myInit()
{   IplImage * img = cvLoadImage("image.jpg"); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
    glGenTextures(1, &id); /// 產生Generate 貼圖ID
    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    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);
}   ///最後一行最難/最重要, 所有貼圖影像的資料都設定好
int main(int argc, char**argv)
{   glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display); ///顯示
    glutIdleFunc(display);///自動轉很帥 (閒閒沒事幹, 就重畫)
    myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    glutMainLoop();
}




2015年4月8日 星期三

02160704 王庭翊




今天上課把CodeBlocks的程式加上了音樂讓我們的程式越來越豐富
而且上課都是一步一步來所以這樣確保大家都有跟上是不錯的方式
下禮拜要期中考了~加油




#include <GL/glut.h>
#include <stdio.h>
void display()
{
  glutSolidTeapot(0.3);
  glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='a'){printf("AAA\n");}
    else if(key=='b'){printf("BBB\n");}
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("hellow");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}
#include <GL/glut.h>
#include <mmsystem.h>
#include <stdio.h>

void display()
{
  glutSolidTeapot(0.3);
  glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
    if(key=='a'){printf("AAA\n");}
    else if(key=='b'){printf("BBB\n");}
}
void mouse(int buttom, int state,int x, int y)
{
    printf("now playing sound\n");
    PlaySound("bubbs", NULL, SND_ASYNC);
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("hellow");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMainLoop();
}









2015年3月25日 星期三

02160704 王庭翊 week05



因為之前在忙啦啦的事,所以缺了一兩堂課
所以今天上課的時候就對上課內容有點不熟悉
但經過同學跟老師的幫忙也慢慢地跟上進度了~~~~






3D正方形


讓3D正方形移動


                                                                              利用(菱形密密縫)的方式做出長方體







插入glutMotionFunc(motion);函式讓我們可以利用滑鼠操控圖形




#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef( angle,  0, 1, 0.5);
    glBegin(GL_POLYGON);;
        glColor3f(1,0,0);
        glVertex3f(0.1, 0.1, 0.8);
        glVertex3f(-0.1, 0.1, 0.8);
        glVertex3f(-0.1, -0.1, 0.8);
        glVertex3f(0.1, -0.1, 0.8);
     glEnd();

     glBegin(GL_POLYGON);;
        glColor3f(1,0,0);
        glVertex3f(0.1, 0.1, -0.8);
        glVertex3f(-0.1, 0.1, -0.8);
        glVertex3f(-0.1, -0.1, -0.8);
        glVertex3f(0.1, -0.1, -0.8);
     glEnd();

     glBegin(GL_QUAD_STRIP);
        glColor3f(1,1,0);
        glVertex3f(0.1, 0.1, 0.8);
        glVertex3f(0.1, 0.1, -0.8);
        glVertex3f(-0.1, 0.1, 0.8);
        glVertex3f(-0.1, 0.1, -0.8);
        glVertex3f(-0.1, -0.1, 0.8);
        glVertex3f(-0.1, -0.1, -0.8);
        glVertex3f(0.1, -0.1, 0.8);
        glVertex3f(0.1, -0.1, -0.8);
     glEnd();
     glPopMatrix();
     angle +=0.01;
     glFlush();
}
   int oldX=0;
   void motion(int x, int y)
   {
       angle += (x-oldX);
       oldX=x;
   }

int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("02160704flight");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMotionFunc(motion);///mouse motion drag動作移動的函式

    glutMainLoop();
}