顯示具有 40347041S_羅宣 標籤的文章。 顯示所有文章
顯示具有 40347041S_羅宣 標籤的文章。 顯示所有文章

2017年11月23日 星期四

羅宣的學習筆記 WEEK11


Part1 _在程式中加入聲音

#include <mmsystem.h>  //加入多媒體函式庫
int main(int argc, char *argv[])
{
    PlaySoundA("file.wav",NULL,SND_ASYNC); //檔案要放在bin資料夾裡面
    //SYNC=>同步
    //ASYNC=>不等同步.


Part1 _在程式中加入聲音

2017年11月9日 星期四

羅宣的學習筆記_WEEK09

Bump Mapping

part1

來看一下日本人寫的範例:https://www.openprocessing.org/sketch/249457

*用到微積分偏微分的概念-->投影片有

part2

把日本人的程式碼貼到 processing-3.3.6-windows64.zip [在Moodle上]上面執行
發現有落差

















part3

processing 寫簡單程式

size(200,200); 開一個200*200的視窗
fill(#FF0000); 填入一個顏色
rect(10,10,50,50); (10,10)這個座標畫一個50*50的矩形




















1.下載一張圖
2.開新的檔案-->把圖拖進去
PImage  img=loadImage("Stuart.png"); Load圖片
size(600,600);
image(img,0,0,600,600); 畫600*600的圖片
































羅宣的學習筆記_WEEK08

1.安裝OpenCV 選取 Add OpenCV to the system PATH for all users 其他都按下一步

2.到 jsyeh.org/3dcg10下載 data.zip, windows.zip , glut32.dll, source.zip
3.開啟Project 選取 Console application,語言選C++



3.複製程式碼放進cpp檔
#include <opencv/highgui.h>

int main()
{
    IplImage * img = cvLoadImage("earth.jpg");
    cvNamedWindow("Hello opencv");
    cvShowImage("Hello opencv", img);
    cvWaitKey(0);
}
4.在Codeblocks中對 666.cbp 按右鍵 -->  Build Option --> Search directories

 5.   Compiler --> Add --> 輸入 : 【c:\\opencv2.1\include】
     Linker     --> Add --> 輸入 : 【c:\\opencv2.1\lib】



 6.  點選 Linker setting --> Link Libraries 
      Add --> 輸入 --> 【cv210】
      Add --> 輸入 --> 【cxcore210】
      Add --> 輸入 --> 【highgui210】
      點選OK

7.下載一張earth.jpg放在專案資料夾內,並執行

8.再開一個glut專案
一樣Codeblocks中對 777.cbp 按右鍵 -->  Build Option --> Search directories
Compiler --> Add --> 輸入 : 【c:\\opencv2.1\include】
     Linker     --> Add --> 輸入 : 【c:\\opencv2.1\lib】
點選 Linker setting --> Link Libraries 
      Add --> 輸入 --> 【cv210】
      Add --> 輸入 --> 【cxcore210】
      Add --> 輸入 --> 【highgui210】
9.再將程式碼 加到main裡面
IplImage * img = cvLoadImage("earth.jpg");
    cvNamedWindow("Hello opencv");
    cvShowImage("Hello opencv", img);
    //cvWaitKey(0);
10.把#include <opencv/highgui.h>加入main.cpp 並執行


--------------------------------------------------------------------------------------
啟動程式OpenGL貼圖

複製程式碼到Glut專案的main.cpp 直接覆蓋
#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月19日 星期四

羅宣的學習筆記 WEEK5




投影

gluPerspective(fovy[視野],aspect[x.y比例],zNea,zFar)

1. ~jsyeh.org/3dcg10 下載win32, glut32.dll, data
2. 解壓win32到windows,glut32.dll, data 放入windows
3.執行Transformation.exe
4.執行Projection,並按右鍵來切換函數


gluPerspective(fovy[視野],aspect[x.y比例],zNea,zFar)
glOrtho(左、右、上、下、近、遠);
glFrustum(左、右、上、下、近、遠);
gluLookAt(eyeX, eyeY, eyeZ,
                 centerX, centerY, centerZ,
                 upX, upY, upZ);


5. 下載並執行老師的檔案

羅宣的學習筆記WEEK04



旋轉茶壺




glutSolidSphere(1,slices,stacks);        [ 實心圓形旋轉 ]
改成
glutSolidTeapot(1);       [ 實心茶壺旋轉 ]
成功把旋轉的圓形變成旋轉的茶壺


















重疊圖案

原本程式碼再加入
glutSolidTeapot(1);
就會跟原本的圖重疊旋轉

加入
glColor3d(1,0,0);
改變顏色






















程式碼分析

const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;


glPushMatrix();                            [備份矩陣]
        glTranslated(-2.4,1.2,-6);      [移動 (X,Y,Z) (左,上,內) ]
        glRotated(60,1,0,0);              [60度旋轉,因為(1,0,0)-->繞著X逆時針旋轉60度]
        glRotated(a,0,0,1);                [持續旋轉,因為(0,0,1)-->繞著Z作逆時針旋轉] 
        glColor3d(1,1,0);                  [改顏色]
        glutSolidTeapot(1);               [實心茶壺]
glPopMatrix();                              [還原矩陣]




















( 一直在轉動 )


縮放

glScaled(2,2,2);      [ XYZ都放大兩倍 ]




羅宣的學習筆記_WEEK06


Lighting 打光


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_LIGHT0);      [設定開始打光]
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_DEPTH_TEST);     [設定深度測試]


    glutMainLoop();
}



















void keyboard(unsigned char key ,int x, int y)     [unsigned=>沒有負號] 
{
    printf("now: %c (%d,%d)\n",key,x,y);
}

void mouse(int button ,int stste,int x,int 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_LIGHT0);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_DEPTH_TEST);


    glutMainLoop();
}














使用鍵盤旋轉

void keyboard(unsigned char key ,int x, int y)
{
    printf("now: %c (%d,%d)\n",key,x,y);
    if(key=='1')rotateX ++;     [X軸旋轉] 
    else if (key=='2')rotateY ++;     [Y軸旋轉] 
    else if (key=='3')rotateZ ++;     [Z軸旋轉] 
    glutPostRedisplay();     [馬上更新畫面] 
}


void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();     [開始畫] 
        glRotatef(rotateX, 1,0,0);     [X軸旋轉] 
        glRotatef(rotateY, 0,1,0);     [Y軸旋轉] 
        glRotatef(rotateZ, 0,0,1);     [Z軸旋轉] 
        drawmodel();
    glPopMatrix();     [結束畫] 
    glutSwapBuffers();
}
















使用滑鼠旋轉

void mouse(int button ,int state,int x,int y)
{
    printf("button: %d state: %d (%d,%d)\n",button,state,x,y);
    if(state==GLUT_DOWN)    [滑鼠按下去開始記錄] 
    {
        oldX=x;    [滑鼠位置記成oldX.oldY] 
        oldY=y;
    }
}

void motion(int x,int y) 
{
    rotateY += -(x-oldX);    [對Y軸旋轉"X位移量"] 
    rotateX += -(y-oldY);    [對X軸旋轉"Y位移量"] 
    oldX=x;    [更新oldX] 
    oldY=y;    [更新oldY] 
    glutPostRedisplay();     [馬上更新畫面] 
}

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

    glutDisplayFunc(display);
    glutMotionFunc(motion);     [使用滑鼠旋轉] 
    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);

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

    glutMainLoop();
}
















2017年9月21日 星期四

羅宣的學習筆記_Week02





#include <GL/glut.h> //呼叫3D glut外掛
#include <stdlib.h>

static void display(void)
{
        glClearColor(1,0,0,0);//設定背景顏色為紅色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清理背景顏色
glutSolidTeapot(0.3);//呼叫茶壺圖案
glutSwapBuffers();//清理繪圖BUFFER
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");//視窗名稱
    glutDisplayFunc(display);//乎叫display函式
    glutMainLoop();//執行迴圈
    return EXIT_SUCCESS;
}

執行結果:





















設定茶壺顏色


#include <GL/glut.h> //呼叫3D glut外掛
#include <stdlib.h>

static void display(void)
{
        glClearColor(1,0,0,0);//設定背景顏色為紅色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清理背景顏色

        glColor3f(0,1,1);//設定茶壺顏色(3=三個顏色,f=小數點)

glutSolidTeapot(0.3);//呼叫茶壺圖案
glutSwapBuffers();//清理繪圖BUFFER
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");//視窗名稱
    glutDisplayFunc(display);//乎叫display函式
    glutMainLoop();//執行迴圈
    return EXIT_SUCCESS;
}

執行結果:

























繪製多邊形



#include <GL/glut.h> //呼叫3D glut外掛
#include <stdlib.h>

static void display(void)
{
        glClearColor(1,0,0,0);//設定背景顏色為紅色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清理背景顏色

glBegin(GL_POLYGON); //開始畫多邊形 glVertex3f(1,1,0);
glVertex3f(-1,1,0);
glVertex3f(0,-1,0); //設定頂點
glEnd(); //結束畫多邊形

glutSwapBuffers();//清理繪圖BUFFER
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");//視窗名稱
    glutDisplayFunc(display);//乎叫display函式
    glutMainLoop();//執行迴圈
    return EXIT_SUCCESS;
}

執行結果: