顯示具有 40447005S_張秉睿 標籤的文章。 顯示所有文章
顯示具有 40447005S_張秉睿 標籤的文章。 顯示所有文章

2017年11月30日 星期四

rayㄉweek12

(1) 主題: scene 場景
(2) 主題: Mocap, Skeleton, Model
(3) 期末作品分析和協助
(4) QA

(a)使用p語言建立3D模型

1.速寫本-> 引用庫文件->添加庫文件















 2.搜尋 Filter ->下載Collada















3.文件->範例程序-> Viewer2D                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           



4.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 





2017年11月23日 星期四

rayㄉweek10

week11
(1) 主題: 聲音-音效,音樂
(2) 平台: window,  Java, p語言
(3) 期末作品 proposal 提案分析
(4) Mocap

a. 播放wav檔

 增加標頭檔
#include <mmsystem.h>   //使用multimedia system 多媒體檔案

PlaySoundA("file.wav",NULL,SND_SYNC);   


SND_SYNC  等同步
SND_ASYNC  不等同步,繼續下一行














b. 播放mp3檔

#include <stdio.h>
#include "CMP3_MCI.h" 

CMP3_MCI mp3;                ///宣告變數

int main(){
    mp3.Load("file.mp3");  ///讀入mp3檔
    mp3.Play();                   ///播放mp3檔
    printf("enter ");
    int a;
    scanf("%d",&a);
}
















c.使用p語言播放音樂檔

下載 p 語言,到文件庫裡下載聲音檔的執行程式
Minim | An audio.........














程式碼
import ddf.minim.*;       //use ddf's minim music library
Minim minim;               //int a
AudioPlayer player;
AudioPlayer player2;
void setup(){
  minim = new Minim(this);                     //constructor of minim object
  player = minim.loadFile("file.mp3");    //minim load to player
  player.play();
}
void draw(){


}


































2017年11月16日 星期四

RAYㄉweek10

1. 期末作品分享
2. siggraph
3.影片示範


TODO:
1.下載並執行processing
2.void steup(){
      fullscream();
  }
 void draw(){
    if(mousePressed) background(255,0,0);
    else
         background(0,255,0)
}

2017年11月9日 星期四

rayㄉweek09

(1) 上週 texture 貼圖,詳解
(2) 多重貼圖
(3) Bump Mapping

a.熟悉processing

到這個網站
 https://www.openprocessing.org/sketch/249457







2017年11月2日 星期四

rayㄉweek08

1. 主軸: texture 貼圖
2. OpenCV 安裝,讀圖
3. OpenCV 貼圖設定
4. 範例: 轉動地球

a. 安裝OpenCV ,然後用codeblocks 打開圖檔

1.先下載OpenCV , 安裝時要記得勾選第三步














2.安裝完成後,打開codeblocks,用console 和c++
程式碼
#include <opencv/highgui.h>

int main(){
    IplImage *img=cvLoadImage("world.jpg");
    cvNamedWindow("hello opencv");
    cvShowImage("hello opencv",img);
    cvWaitKey(0);
}















b.把openglut和console一起打開

openglut的程式碼
#ifdef __APPLE__
#else
#include <GL/glut.h>
#endif

#include <stdlib.h>

static int slices = 16;
static int stacks = 16;

static void resize(int width, int height)
{
    const float ar = (float) width / (float) height;

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;
}

static void display(void)
{
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);

    glPushMatrix();
        glTranslated(-2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidSphere(1,slices,stacks);
    glPopMatrix();

    glPushMatrix();
        glTranslated(0,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidCone(1,1,slices,stacks);
    glPopMatrix();

    glPushMatrix();
        glTranslated(2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidTorus(0.2,0.8,slices,stacks);
    glPopMatrix();

    glPushMatrix();
        glTranslated(-2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireSphere(1,slices,stacks);
    glPopMatrix();

    glPushMatrix();
        glTranslated(0,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireCone(1,1,slices,stacks);
    glPopMatrix();

    glPushMatrix();
        glTranslated(2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireTorus(0.2,0.8,slices,stacks);
    glPopMatrix();

    glutSwapBuffers();
}


static void key(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27 :
        case 'q':
            exit(0);
            break;

        case '+':
            slices++;
            stacks++;
            break;

        case '-':
            if (slices>3 && stacks>3)
            {
                slices--;
                stacks--;
            }
            break;
    }

    glutPostRedisplay();
}

static void idle(void)
{
    glutPostRedisplay();
}

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.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 };

#include <opencv/highgui.h>
int main(int argc, char *argv[])
{
    IplImage * img=cvLoadImage("world.jpg");
    cvNamedWindow("OpenCV");
    cvShowImage("OpenCV", img);
    ///cvWaitKey(0);
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    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);

    glutMainLoop();

    return EXIT_SUCCESS;
}
















c. 讓地圖轉動

程式碼
#include <opencv/highgui.h>                           ///for cvLoadImage()
#include <opencv/cv.h>                                   ///for cvCvtColor()
#include <GL/glut.h>                                      ///3D glut
#include <stdio.h>
GLUquadric * quad;
GLuint id;
float angle=0;
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, 1, 30, 30);                  ///glutSolidTeapot(0.3);
    glPopMatrix();                                         ///自動轉很帥
    glFlush();
}
void timer(int t)
{   glutTimerFunc(20, timer, 0);                   /// 1000 msec   50fps:20msec
    angle+=1;///自動轉很帥
    glutPostRedisplay();
}
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("earth.jpg");
}
int main(int argc, char**argv)
{   glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display);                                 ///顯示
    glutTimerFunc(0, timer, 0);
    myInit();                          ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    glutMainLoop();
}






























































































2017年10月26日 星期四

rayㄉweek 7

(1)作業二展示,互評
(2)主題: Mouse,Model,打光 ->用mouse調光源
(3)主題: Lighting打光,Shading光影

a.用滑鼠調光源

多加程式碼

void motion(int x,int y){
    light_position[0]= (x-150)/150.0*2;
    light_position[1]= -(y-150)/150.0*2;
    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
    glutPostOverlayRedisplay();
}


2017年10月19日 星期四

ray ㄉweek06

(1)複習上週進度
(2)編譯上週 transformation 程式 (小心 compiler設定 vs. strdup() )
(3)作業2 : Keyboard, Mouse, 轉動 ,移動
(4)主軸: 打光Lighting

a.解決上週的問題

把c++11 的勾點掉


















然後就可以正確執行ㄌ

















b.第一步打光

程式碼:
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
void drawmodel(void)
{
    if (!pmodel) {
pmodel = glmReadOBJ("data/al.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}
GLfloat pos[]={0.0, 0.0, -1.0, 0.0};

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

    glutDisplayFunc(display);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glutDisplayFunc(display);

    glutMainLoop();
}



























c. 紀錄鍵盤和滑鼠輸入的字

多加  
void keyboard(unsigned char key, int x, int y){
    printf("now: %c (%d %d)\n",key,x,y);
}

void mouse(int botton,int state,int x,int y){
   printf("botton: %d state: %d (%d %d)\n",botton,state,x,y);
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glutDisplayFunc(display);

    glutMainLoop();
}















這樣在小黑格就會紀錄所有的輸入拉
















D.用鍵盤讓模型轉動

多加程式碼
int rotateX=0,rotateY=0,rotateZ=0;
void keyboard(unsigned char key, int x, int y){
    printf("now: %c (%d %d)\n",key,x,y);
    if(key=='1') rotateX++;
    if(key=='2') rotateY++;
    if(key=='3') rotateZ++;
    glutPostRedisplay();   //每次輸入馬上更新
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(rotateX, 1,0,0);
        glRotatef(rotateY, 0,1,0);
    drawmodel();
    glutSwapBuffers();
}















這樣就可以順利轉拉















E.用滑鼠讓模型轉動

void mouse(int botton,int state,int x,int y){
    printf("botton: %d state: %d (%d %d)\n",botton,state,x,y);
    if(state==GLUT_DOWN){
        oldX=x;
        oldY=y;
    }
}
void motion(int x,int y){
    rotateX += -(y-oldY);
    rotateY += -(x-oldX);
    oldX=x;
    oldY=y;
    glutPostRedisplay();
}





































2017年10月12日 星期四

rayㄉ第五週

1.複習上週主題(旋轉.etc)
2.主題: viewing
3.範例網址 :http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
4.viewing 相關函式&介紹
5.作業: 利用mouse/keyboard實作

第一堂

a.到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 網頁中下載data , windows , glut32
















b.把三個檔案解壓所放到同一個資料夾,並執行Transformation.exe














就跑出今天第一個執行結果~

















第二堂

a.打開projection.exe




























gluPerspective :透式投影法    fovy :視野    aspect: x,y的比例
















gluOrtho 垂直透視法  (left , right, bottom , top , near , far)


2017年10月5日 星期四

ray ㄉ第四週

1.主題: 移動,旋轉,縮放
2.實作: Translate,Rotate,Scale
3.觀念: 矩陣Matrix,Push,Pop
4.作業: 加入移動,旋轉



1.找到程式碼中的display













2.
以glPushMatrix和glPopMatrix間的程式碼為一個單位
 glPushMatrix();
        glTranslated(0,1.2,-6);    //移動
        glRotated(60,1,0,0);       //沿著x軸旋轉60度
        glRotated(a,0,0,1);        //沿著z軸自由旋轉
        glColor3f(1,1,0); glutSolidTeapot(1);    //加入teapot    
        glutSolidCone(1,1,slices,stacks);
    glPopMatrix();

把茶壺加進去













按下F9茶壺就出來啦~













3.
用 glColor3f 改變顏色
在 glutSolidTeapot(a)  a可以改變茶壺大小















4.
當我把旋轉的第一行隱藏
只沿著z軸旋轉
//glRotated(60,1,0,0);
  glRotated(a,0,0,1);













5.
加入 glScaled(x,y,z); 可以改變大小













x,y,z 也可以不等量
ex) glScaled(0.2,2,2);














b.移動茶壺

在函式中加入 glutMouseFunc(mouse);
                      glutMotionFunc(Motion);










2017年9月21日 星期四

2017/9/21 week2 rayㄉ筆記

主題 :點、線、面

程式碼:
1.顏色
#include <GL/glut.h>

void display(void)
{
    glClearColor(1,0,0,0); //前面三個是自個別代表red,orange,blue的背景顏色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,1); //茶壺的顏色
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
    return EXIT_SUCCESS;
}
執行結果:


















2. 加三頂點
#include <GL/glut.h>

void display(void)
{
    glClearColor(0,1,0,0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,1);

    glBegin(GL_POLYGON);
    glVertex3f(1,1,0);   //三頂點
    glVertex3f(-1,1,0);
    glVertex3f(0,-1,0);
    glEnd();

    glutSolidTeapot(0.3);
    glutSwapBuffers();
}


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
    return EXIT_SUCCESS;
}

執行結果:


2017年9月14日 星期四

Ray 的 Week01

1.建立一個新專案


2.點選openGL


3.命名自己的程式



4.按f9執行



part2 GLUT

1.解壓縮freeglut 資料夾



2.打開codeblocks 新建專案

 

3.選擇glut

 

4.命名專案


5. 在按繼續之前,要先回freeglut中的lib



6.更改複製的libfreeglut.a改成libglut32.a


7.按F9執行