顯示具有 02160571_黃冠瑛 標籤的文章。 顯示所有文章
顯示具有 02160571_黃冠瑛 標籤的文章。 顯示所有文章

2015年6月18日 星期四

week17_02160571_黃冠瑛_期末機器人作品展示


當同學在趕工的時候,我也在旁邊幫著debug
(不知道他們有沒有 寫個甚麼幫助同學的名單XDD)
雖然我有時間可以將自己的作品改的更精緻
但我希望大家可以將目光focus在模型上
所以才沒有加特效、貼圖
華麗的看得多了
偶而也要點小清新

老師很辛苦啊~時間到了還在回答同學的問題
電腦圖學week17
資傳二乙02160571-黃冠瑛
下台一鞠躬

2015年6月11日 星期四

02160571_week16_黃冠瑛

(1)移動、旋轉、縮放
(2)T-R-T及關節運動
(3)存檔、讀檔、播放
(4)內插動作Interpolate
(5)期末作品


  先從T-R-T範例
TRT.exe
TRT.cpp

根據上星期的專案到這裡,




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<10;i++)
    {
        printf("%f ",angle[i]);
        fprintf(fout, "%f " , angle[i]);//空格要有,不然不會play
    }
    printf("\n");
    fprintf(fout,"\n");
}


今天真的是太睏了= =|||
void readNew()
{
    if(fin==NULL)fin=fopen("a.txt","r");
    for(int i=0;i<10;i++)
    {
        angleOld[i]=angleNew[i];///睏到竟然少打這行都沒發現,結果play完一直重跑最後一秒
        fscanf(fin,"%f ", &angleNew[i]);
        printf("%f ",angleNew[i]);
    }
    printf("\n");
}

2015年6月4日 星期四

02160571_week15_黃冠瑛

(1)複習上週TRT
(2)期中作品
(3)建出全身關節
(4)鍵盤滑鼠操控
(5)存檔play撥放
TODO:
freeglut解壓縮
GLUT專案(last week)
TODO:main.cpp(last week)
TRT.exe+freeglut.dll
將上週做到一半的機器人程式碼重新複製貼上到新的robot專案(GLUT)內並執行



void keyboard(unsigned char key, int x,int y)
{
    if(key=='1')angle1++;
    if(key=='2')angle2++;
    if(key=='3')angle3++;
    if(key=='4')angle4++;
}
float angle1=0,angle2=0,angle3=0,angle4=0;
 glRotatef(angle1, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
 glRotatef(angle2, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
 glRotatef(angle3, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
 glRotatef(angle4, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3

用陣列寫出轉動關節
float angle[10];///angle1=0,angle2=0,angle3=0,angle4=0;
int angleID=1;
glRotatef(angle[1], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
glRotatef(angle[2], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
glRotatef(angle[3], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
glRotatef(angle[4], 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
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;
}
void motion(int x, int y)
{   angle[angleID] -= y - oldY;
    oldY=y; oldX=x;
}
新增
#include <stdio.h>///write file
FILE *fout=NULL;///write file

void motion(int x, int y)
{   angle[angleID] -= y - oldY;
    oldY=y; oldX=x;

    if(fout==NULL)fout=fopen("a.txt","w+");
    printf("%f",angle[4]);
    fprintf(fout,"%f\n",angle[4]);
}
FILE *fin=NULL;///read file
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')playing=1;
}
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<10; i++){
        printf("%.1f",angle[i]);
        fprintf(fout,"%.1f\n",angle[i]);
    }
    printf("\n");    fprintf(fout,"\n");
}
void timer(int t)
{
    glutTimerFunc(20, timer, t+1);
    //angle++;
    if(playing==1)
    {
        if(fin==NULL)fin=fopen("a.txt","r");///read file
        for(int i=0; i<10; i++){
            fscanf(fin,"%f",&angle[i]);
        }
    }
    glutPostRedisplay();
}

glPushMatrix();
    glRotatef(angle[0], 0,1,0);///把下面整團, 都對中間做旋轉 ver 3
    drawArm();///這是個Arm ver 1  Right Upper Arm
.
.
.
glPopMatrix();



2015年5月28日 星期四

02160571_黃冠瑛_week14

電腦圖學week14
(1)期末作品
(2)會跳舞的機器人
(3)T-R-T對關節
(4)小考TRT觀念
(5)作業問題

TODO是windows.7z裡tranformation的
Al Capone

  移動旋轉

旋轉移動


TODO:
version1:打光茶壺
version2:打光茶壺右移
version3:整盤旋轉
version4:滑鼠控制
version5:掛到該放的位置
#include <GL/glut.h>
float angle=0, oldX=0, oldY=0;
void drawArm()
{
    glPushMatrix();
        glScalef(0.5, 0.25, 0.25);
        glutSolidCube(1);
    glPopMatrix();
}
void drawBody()
{
    glPushMatrix();
        glTranslatef(0, -0.5, 0);
        glRotatef(-90, 1, 0, 0);
        glutSolidCone(0.3, 0.8, 30, 30);
    glPopMatrix();

}
void display()
{
    {///light
        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.15, 0.1, 0);       glTranslatef(0.45, 0.1, 0);
        glRotatef(angle, 0 , 0, 1);        glRotatef(angle, 0 , 0, 1);
        glTranslatef(0.25, 0, 0);///version2:move to right
        drawArm();///glutSolidTeapot(0.3);
        glPushMatrix();
            glTranslatef(0.25, 0, 0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(0.25, 0, 0);
            drawArm();        glutSolidTeapot(0.3);
        glPopMatrix();
    glPopMatrix();

   glPushMatrix();
        glTranslatef(-0.15, 0.1, 0);
        glRotatef(angle, 0 , 0, 1);
        glTranslatef(-0.25, 0, 0);
        drawArm();
        glPushMatrix();
            glTranslatef(-0.25, 0, 0);
            glRotatef(angle, 0, 0, 1);
            glTranslatef(-0.25, 0, 0);
            drawArm();        glutSolidTeapot(0.3);
       glPopMatrix();
    glPopMatrix();

    drawBody();   glutSolidTeapot(0.3);

    glFlush();
}
void timer (int t)
{
    glutTimerFunc(20, timer, 0);
    ///angle++;
    glutPostRedisplay();
}

void mouse (int button, int state, int x, int y)
{
   if(state==GLUT_DOWN)
   {
       oldX=x;
       oldY=y;
   }
}

void motion (int x,int y)
{
     angle+= (x -oldX);
    oldX = x;
}

int main (int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("TRT 3D");
    glutDisplayFunc(display);
    glutTimerFunc(20, timer , 0);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);

    glutMainLoop();
}

1

2

3

4
5
6





2015年5月21日 星期四

02160571_黃冠瑛_week13

電腦圖學
(1)13:00~14:40在P102由LIVEhouse.in 的鄭鍇尹博士演講
(2)14:50回s5131-1上課
(3)MP3播放
(4)作業需求
#include "CMP3_MCI.h"
#include <GL/glut.h>
#include <stdio.h>
CMP3_MCI myMP3;

int main ()
{
    myMP3.Load("RickyMartin.mp3");
    myMP3.Play();
    int a;
    scanf("%d",&a);
    return 0;
}



2015年5月14日 星期四

02160571_week12_黃冠瑛

(1)作業回顧
(2)作業需求(小遊戲)
(3)3D modle模型glm.c
(4)Maya轉OBJ檔
(5)介紹助教影片資源

TODO:freeglut準備
TODO:jsyeh.orf/3dcg10
{windows.zip
 data.zip
 source.zip
 glut32.dll
}
老師給的windows.7z的壓縮資料夾內
TODO:跑windows.7z裡的Transformation.exe
右上角按右鍵切換3D模型
下面左鍵拖曳滑動
TODO:6行程式碼,讀3DModel小心照老師截圖設定
(1)新project-GLUT(投機)今天步驟多多= =
將副檔名顯現出來(等等會用到)
(2)(3)#include "glm.h"
(把glm.c跟glm.h放到main.cpp同一個目錄裡,再將glm.c改成glm.cpp )

(4)把transformation.c裡的6行copy到程式

(5)
把模型放好
freeglut的bin資料夾裡面
程式碼改為pmodel = glmReadOBJ("porsche.obj");
GLUT程式碼加頭尾,顯示。(10行)



(6)打光囉~(4行)
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);

從transformation的程式碼裡面尋找燈光程式碼QQ


光的位置本來是1.0,所以顯示時是暗的,光源改成-1.0就看的到車子啦~~


牛頓是甚麼鬼QQ

2015年5月7日 星期四

week11_02160571_黃冠瑛

(0)前置作業TODO:下載freeglut解壓縮,設置new project,GLUT專案
(1)timer計時器:

void timer (int t)
{
    glutTimerFunc(10,timer,0);//(秒數,,)
    angle+=1;
    glutPostRedisplay();
}
int main (int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display);

    glutTimerFunc(10,timer,0);
    glutMainLoop();
}
(2)多個貼圖
前面做了好多console application的設定,cv210~cxcore210~~highgui210~~~(這是咒語啊!!)
(路徑很重要!)


(路徑很重要!!)

(路徑很重要!!!)





GLuint id;//外部宣告圖片一
GLuint id2;//外部宣告圖片二
void mouse(int button, int state,int x,int y)//用按鍵切換圖片
{
    if(state==GLUT_UP)glBindTexture(GL_TEXTURE_2D, id);
    else if(state==GLUT_DOWN)glBindTexture(GL_TEXTURE_2D, id2);
}
//又臭又長函式
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);

    IplImage * img2 = cvLoadImage("image2.jpg"); ///OpenCV讀圖
    cvCvtColor(img2,img2, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    //GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
    glGenTextures(1, &id2); /// 產生Generate 貼圖ID
    glBindTexture(GL_TEXTURE_2D, id2); ///綁定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, img2->width, img2->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img2->imageData);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好


把又臭又長的程式改掉以後,

int myTexture(char *filename)
{
    IplImage * img = cvLoadImage(filename); ///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);
    return id;
}
void myInit()
{
    quad = gluNewQuadric();
    id=myTexture("image.jpg");
    id2=myTexture("image2.jpg");

}