顯示具有 02163042_王冠閔 標籤的文章。 顯示所有文章
顯示具有 02163042_王冠閔 標籤的文章。 顯示所有文章

2015年6月11日 星期四

02163042_王冠閔_week15

(1)移動、旋轉、縮放

(2)T-R-T及關節結構


(3)存檔、讀檔、播放

存檔

if(key=='s'){
             if(fout==NULL) fout=fopen("a.txt", "w+");
        for(int i=0;i<10;i++)
        {
            printf("%.1f ", angle[i]);
            fprintf(fout, "%.1f ", angle[i]);
        }
        printf("\n"); fprintf(fout, "\n");
    }
    glutPostRedisplay();
-----------------------------------------------------------------------------------------------------------------------

讀檔

void readNew()
{
    if(fin==NULL) fin=fopen("a.txt", "r");
        for(int i=0;i<10;i++){
            angleOld[i]=angleNew[i];
            fscanf(fin, "%f", &angleNew[i]);
            printf("%f ", angleNew[i]);
        }
    printf("\n");
}
-----------------------------------------------------------------------------------------------------------------------

播放

void timer(int t)
{
    glutTimerFunc(20, timer, t+1);
    float a=(t%50==0)/50.0;
    if(t%50==0) readNew();
    for(int i=0;i<10;i++)
    {
        angle[i]=(1-a)*angleOld[i]+(a)*angleNew[i];

    }
    glutPostRedisplay();
}

(4)內插動作Interpolate

內插公式

glutTimerFunc(20, timer, t+1);
    float a=(t%50==0)/50.0;
    if(t%50==0) readNew();
    for(int i=0;i<10;i++)
    {
        angle[i]=(1-a)*angleOld[i]+(a)*angleNew[i];

    }

(5)期末作品

2015年5月28日 星期四

02163042_王冠閔_week14


(1)期末作業
(2)會跳舞的機器人
(3)T-R-T對關節轉
(4)小考T-R-T觀念

今日課程


2015年5月21日 星期四

02163042_王冠閔_week13

(1)MP3播放

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

CMP3_MCI myMP3;

using namespace std;

int main()
{
    myMP3.Load("RickyMartin.mp3");
    myMP3.Play();
    cout<<"hello !!!"<<endl;
    int a;
    cin>>a;
    return 0;
}


(2)作業需求

2015年5月14日 星期四

02163042_王冠閔_week12

(1)作業回顧


開啟transformation檔案執行範例


(2)作業需求

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

(3)3D Model模型

glutInit(&argc, argv);
    glutCreateWindow("GLUT");
    glutDisplayFunc(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);


2015年5月7日 星期四

02163042_王冠閔_week11

(1)Timer計時器

void timer(int t)
{
    glutTimerFunc(10, timer, 0);
    angle+=1;
    glutPostRedisplay();
}

(2)上禮拜回顧和多個貼圖



作業:互動小遊戲




2015年4月30日 星期四

02163042_王冠閔_week10

(1)openCV 2.1 設定 讀圖





int main()
{
    IplImage * img = cvLoadImage("image.jpg");
    cvShowImage("2D", img);
    cvWaitKey(0);
}


(2)openGL 設定

#include <GL/glut.h>
#include <opencv/highgui.h>
float angle = 0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle, 0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glFlush();
    angle+=0.1;
}
int main(int argc, char**argv)
{
    IplImage * img = cvLoadImage("image (7).jpg");
    cvShowImage("2D", img);
    //cvWaitKey(0);
    glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}


(3)貼圖設定:地圖

void init()
{   IplImage * img = cvLoadImage("image (7).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的圖, 全部設成貼圖的內容


(4)有能力做小遊戲


2015年4月16日 星期四

02163042_王冠閔_week8

(1)用範例學習    打光  法向量 貼圖  座標


小遊戲

點擊滑鼠出現聲音
void mouse(int button, int state, int x, int y)
{
    if(state==GLUT_DOWN){
        PlaySound("Shot.wav",NULL, SND_ASYNC);
        printf("Shot!\n");
    }
}

讓茶壺移動
glPushMatrix();
        glTranslatef(potX, potY, 0);
        glutSolidTeapot(0.05);
    glPopMatrix();

讓茶壺重新出發 
if(potX>1.1) potX=-1.1;























若擊中茶壺則發出另外的聲音
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("kiss.wav",NULL, SND_ASYNC);
        printf("you got it!!!\n");
        }









2015年4月9日 星期四

02163042_王冠閔_week07

(1) Keyboard ,Mouse ,UI,音效 音樂

 keyboard:

void keyboard(unsigned char key, int x, int y)
{
    if(key=='a') printf("aaaa\n");
    if(key=='b') printf("bbbb\n");
}

keyboard music:

void keyboard(unsigned char key, int x, int y)
{
    if(key=='a')
        {
            PlaySound("madmoo.wav", NULL, SND_ASYNC);
            printf("喔喔喔\n");
        }
}

(3)期中考題目答案
(5)模擬考

2015年3月26日 星期四

02163042_王冠閔_week05

(1).自製3D模型

長方形雛形
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_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();

長方型透視圖:
glBegin(GL_LINE_LOOP);
glBegin(GL_LINE_LOOP);
glBegin(GL_LINES);



長方形填滿圖+黑色線:
glBegin(GL_POLYGON);
glBegin(GL_POLYGON);
glBegin(GL_QUAD_STRIP);




(2).利用滑鼠旋轉

簡單的滑鼠移動:
加一個void
void motion(int x,int y)
{
    printf("%d %d\n", x, y);
    angle = x;
    angle2 = y;
}
在int main 底下加一行:
glutMotionFunc(motion);///滑鼠移動

(例外):開啟3D深度測試

開啟一個3D的深度測試:

glEnable(GL_DEPTH_TEST);///開啟3D深度測試
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
在 int main底下加一行
glutInitDisplayMode(GLUT_DEPTH);///讓顯示具有3D深度的功能





2015年3月19日 星期四

02163042_王冠閔_week04

(1).移動.旋轉.放大 縮小 範例檔案
(2).移動 旋轉 放大縮小 code blocks 將茶壺移至右上角
glTranslatef(1,1,0);//移動
glutSolidTeapot(0.3);//畫茶壺

(3).讓空心甜甜圈旋轉
glClear(GL_COLOR_BUFFER_BIT);//清畫面
glRotatef(angle, 1,1,0);//旋轉
glutWireTorus(0.3,0.5, 30,30);//畫空心甜甜圈
glFlush();
angle+=2;

(4).旋轉 清除 移動 備份 還原 空心甜甜圈
glutIdleFunc(display);///隨時呼叫display函式

glClear(GL_COLOR_BUFFER_BIT);///清畫面
    glPushMatrix();///備份
        //glTranslatef(angle,0,0);///移動
        glRotatef(angle, 1,1,0);///旋轉
        glutWireTorus(0.3,0.5, 30,30);///畫空心甜甜圈
    glPopMatrix();///還原



2015年3月12日 星期四

week3_02163042_王冠閔

(1).點.線.面


(2).五行程式


#include<GL/glut.h>
void display()
{
    glClearColor(0.7, 0, 0.6 ,1);

    glClear(GL_COLOR_BUFFER_BIT); //清除BUFFER
    glColor3f(1,1,1);
    glutSolidTeapot(0.5);
    glColor3f(2,1,0);
    glutSolidTeapot(0.4);
    glColor3f(0,0,1);
    glutSolidTeapot(0.3);

    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);

    glutCreateWindow("02163042王冠閔");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

void display()
{
    glClearColor(0.7, 0, 0.6 ,1);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glColor3f(1,1,0);
        glVertex2f(0,0);
        glVertex2f(1,0);
        glVertex2f(0,1);
    glEnd();
    glBegin(GL_POLYGON);
        glColor3f(1,0,0);
        glVertex2f(0,0);

        glColor3f(0,1,0);
        glVertex2f(-1,0);
        glColor3f(0,0,1);
        glVertex2f(0,-1);
     glEnd();
     glFlush();
}


(3).GLUT示範

(4).電腦圖學之父

2015年3月5日 星期四

week02_02163042_王冠閔

1.打造 圖學程式 code Blocks
2.openGL, GLUT




3.freeGLUT 解壓縮
4.打造 GLUT圖學程式







5.寫五行程式
6.寫十行程式 (實心茶壺 左) (空心茶壺 右)
7.用VB C++ 開啟十行程式碼~~~