顯示具有 02160252_黃智筠 標籤的文章。 顯示所有文章
顯示具有 02160252_黃智筠 標籤的文章。 顯示所有文章

2015年6月4日 星期四

02160252智智week15

1. 複習上週T-R-T

2. 期中作品

3. 建出全身關節

4. 鍵盤滑鼠操控動作

5. 存檔 PLAY撥放


#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();
}
float angle1 = 0 , angle2 = 0  , angle3 = 0 , angle4 = 0;
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(angle1, 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(angle2, 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(-angle3, 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(-angle4, 0,0,1);///把下面整團, 都對中間做旋轉 ver 3
            glTranslatef(-0.25, 0,0);///這是把它往右移, Arm Joint在中間 ver 2
            drawArm(); ///Left Lower Arm
        glPopMatrix();
    glPopMatrix();
    drawBody();
    glFlush();
}
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++;
}
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);
    glutKeyboardFunc(keyboard);
    glutMainLoop();

}



#include <GL/glut.h>
#include <stdio.h>
FILE *fout=NULL;
float 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();
}
float angle[10];
int angleID=1;
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[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 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;
    if(fout==NULL)fout=fopen("a.txt","w+");
    printf("%f ",angle[1]);
    fprintf(fout,"%f \n",angle[1]);
}
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);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}








2015年5月28日 星期四

WEEK14智智

電腦圖學week14
(1)展示期末作品
(2)會跳舞的機器人
(3)T-R-T對關節軸
(4)小考:T-R-T觀念



#include <GL/glut.h>

void display()
{
    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);
    glutSolidTeapot(0.3);
    glFlush();
}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("TRT 3D");
    glutDisplayFunc(display);

    glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
float oldX=0,oldY=0;
void display()
{
    {
    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();
        glRotatef(angle,0,0,1);
        glTranslatef(0.5,0,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    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();
}


#include <GL/glut.h>
float angle=0;
float oldX=0,oldY=0;
void display()
{
    {
    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.43,0.13,0);///version 4:把樓下的整個在轉....往右掛在某個地方
        glRotatef(angle,0,0,1);///version 3:rotating teapot on the handle
        glTranslatef(0.45,-0.1,0);///version 2:teapot on the right
        glutSolidTeapot(0.3);///version 1:create a teapot
    glPopMatrix();
    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();
}

2015年5月21日 星期四

02160252智智

1.今天前兩節課去P102聽鄭鎧尹博士演講

2.今日作業:MP3播放

四行程式碼

呼叫MP3出來播放









#include <iostream>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI myMP3;

using namespace std;

int main()
{

    myMP3.Load("ABC.mp3");
    myMP3.Play();
    cout << "Hello world!" << endl;
    int a;
    cin>> a;
    return 0;
}



2015年5月14日 星期四

02160252智智,WEEK12

(1)作業回顧 

(2)作業需求(小遊戲)

(3)3D modle模型glm.c

(4)Maya轉OBJ檔

(5)介紹助教影片資源

今天做的第一個作業是六行程式(讀3D Model)
1.New Project-GLUT(投機的作法)
2.#include "glm.h"(把glm.c(glm.cpp)、glm.h放同目錄)
3.把c改cpp
4.把transformation.c裡的6行copy到程式
接著小黑框出現
把檔案拖進去freeglut內



 最後再加入打光效果
出現車子~

程式碼:
#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)
{
    glutInit(&argc,argv);
    glutCreateWindow("02160473");
    glutDisplayFunc(display);

    pmodel = glmReadOBJ("porsche.obj");
    glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);

glutMainLoop();
}





2015年5月7日 星期四

02160252智智week11

1.timer計時器的應用

利用timer讓這茶壺規律旋轉




2.多個貼圖
第二步利用上禮拜做的地球 
設定貼圖讓地球轉動





#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 timer(int t)
{
    glutTimerFunc(20, timer,0);  ///  1000 msec   50fps:20msec
    glutPostRedisplay();
}
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;///自動轉很帥
}
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
GLuint id2; ///準備一個 unsigned int 整數, 叫 貼圖ID
void mouse(int button, int state, int x, int y)
{
    if(state==GLUT_UP)
        glBindTexture(GL_TEXTURE_2D, id2);
    else if(state==GLUT_DOWN)
        glBindTexture(GL_TEXTURE_2D, id);
}
void myInit()
{
    quad = gluNewQuadric();
    IplImage * img = cvLoadImage("image.jpg"); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    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. 開啟貼圖功能
    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 main(int argc, char**argv)
{   glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display); ///顯示
    //glutIdleFunc(display);///自動轉很帥 (閒閒沒事幹, 就重畫)
    glutTimerFunc(0, timer, 0);
    glutMouseFunc(mouse);
    myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    glutMainLoop();
}





2015年4月30日 星期四

02160252智智hw10

1-下載opencv2.1


2-安裝opencv2.1

3-openCV讀圖設定


4-接下來將2D轉3D



5-最後做出一顆地球
最終程式碼
#include <GL/glut.h> ///我們要使用 GLUT 3D 外掛
#include <opencv/highgui.h> ///要使用 OpenCV的 高級High圖形介面GUI
#include <opencv/cv.h> ///為了 cvCvtColor()而加上 cv.h
float angle=0; ///為了自動轉的角度angle
GLUquadric * quad;
void display()
{
    glEnable(GL_DEPTH_TEST); ///有深度(depth)測試的功能, 才會有正確的景深/前後關係
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清畫面
    glPushMatrix(); ///備份matrix
    glRotatef(-90, 1,0,0);
        glRotatef(angle, 0,0,1);  ///為了自動轉的角度angle
        gluQuadricTexture(quad, 1);
        gluSphere(quad, 0.5, 30, 30);
    glPopMatrix(); ///還原matrix
    glFlush(); ///把馬桶沖出去
    angle+=0.1;  ///為了自動轉的角度angle
}
void init()
{
    quad = gluNewQuadric();
    IplImage * img = cvLoadImage("0000.jpg"); ///讀圖檔
    cvCvtColor(img, img, CV_BGR2RGB); /// ConVerT Color 把圖 BGR 變成 RGB
    glEnable(GL_TEXTURE_2D); ///開啟 2D貼圖功能
    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); ///參數設定 貼圖 S軸 如果超過了, 就REPEAT
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///參數設定 貼圖 T軸 如果超過了, 就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);
}   /// 很長的一行, 把 image的圖, 全部設成貼圖的內容
int main(int argc, char**argv) ///小心,要有 argc, argv哦
{
    glutInit(&argc, argv); ///小心有個 & 哦
    glutCreateWindow("3D"); ///建個3D視窗

    glutDisplayFunc(display); ///畫圖函式
    glutIdleFunc(display); ///閒閒沒事幹, 就重畫

    init(); ///在 MainLoop前, 去做 initial 初始設定 (2D OpenCV, 3D OpenGL Texture)

    glutMainLoop(); ///主要迴圈卡住, 才不會突然程式就結束了
}





2015年4月16日 星期四

week08智智

今天作業試寫射擊遊戲
目標:讓茶壺可從左往右快速移動~~~~


程式碼:
#include<GL/glut.h>
#include<mmsystem.h>
#include<stdio.h>
#include<math.h>
float potX=-1, potY=0;
void mouse(int button, int state, int x ,int y)
{
    if(state==GLUT_DOWN){
        PlaySound("Shot.wav", NULL, SND_ASYNC);
        printf("Shot!\n");

        float mouseX=2*x/1280.0 -1,mouseY=2*y/1024.0 -1;
        if(fabs(mouseX - potX)<0.1&&fabs(mouseY - potY)<0.1){
            PlaySound("chaha.wav",NULL,SND_ASYNC);
            printf("You got it!\n");
        }
    }
}
void keyboard(unsigned char key, int x,int y)
{
    exit(0);
}
void display()
{
    potX+=0.01;
    if(potX>1.1) potX=-1.1;
    glClearColor(0.5,0.5,1,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
            glTranslated(potX, potY, 0);
            glutSolidTeapot(0.05);
    glPopMatrix();
    glFlush();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("hello");

    glutFullScreen();
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMainLoop();

}