顯示具有 04160604_錢兆洋 標籤的文章。 顯示所有文章
顯示具有 04160604_錢兆洋 標籤的文章。 顯示所有文章

2017年6月12日 星期一

Week 14 20170612

課堂作業一

從FB社團下載 [myEarth].zip + [freeglut] 檔案並解壓縮到桌面。
([freeglut]要放在myEarth的資料夾內才能成功執行)
下載OpenCV 2.1 並安裝到桌面 C:\OpenCV2.1\include + \lib +\bin
開啟CodeBlocks並執行myEarth.cbp

2017年6月5日 星期一

Week 13 20170605

課堂作業一
利用以下截圖檔了解內插法的概念
解利用Timer結合角度+內插法的概念實作應用

2017年5月22日 星期一

Week 12 20170522

課堂作業一
利用CodeBlocks開啟並調整參數值
課堂作業二

在main()主函式中加入計時器程式碼。

      glutTimerFunc( sec , timer , 0 );

     
程式碼

#include <stdio.h>

void timer(int t)  /*鬧鐘叫醒時要做什麼事~*/
{
    glutTimerFunc(10,timer,t+1); 
    /*代表先設定下一次什麼時候鬧鐘會叫醒*/   
    angle++;
    printf("現在時間是 %d ",t);
    glutPostRedisplay();
    /*提醒電腦有空要畫一下畫面哦哦哦*/
}
/*再度進入沉睡時間*/

2017年5月15日 星期一

Week 11 201705015

課堂作業一
課堂作業二

程式碼
#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("image.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年5月8日 星期一

Week 10 20170508

課堂作業一

測試各數值的畫面呈現

eyeX(2.80)(鏡頭左右位置)
eyeX(-2.80)(鏡頭左右位置)
eyeY(2.80)(鏡頭上下位置)
eyeY(-2.80)(鏡頭上下位置)
eyeZ(2.00)(鏡頭遠近位置)
eyeZ(-2.00)(負值 由後往前)
centerX(2.00)
centerX(-2.00)
centerY(2.00)
cneterY(-2.00)
centerZ(2.00)(沒有影像)
centerZ(-2.00)()
upX(2.00)(影像旋轉呈現)
upX(-2.00)(影像旋轉呈現)
upY(2.00)(影像顛倒呈現)
upY(-2.00)(影像顛倒呈現)

2017年5月1日 星期一

Week 09 20170501

作業一
下載3D Exploration藉以獲得3D模型
File - Save As
存檔類型 cpp Open GL code
選擇Sample APP
將3D Exploration檔案放入CodeBlocks

2017年4月24日 星期一

Week 08 20170424

課堂作業一
玩有聲音的遊戲

課堂作業二

使用滑鼠點擊觸發音樂
#include<mmsystem.h>
/* Program entry point */
void mouse(int button, int state, int x, int y)
{
    PlaySound("C:\\Users\\user\\Desktop\\Lesson32\\data/shot.wav",NULL,SND_ASYNC);
}
int main(int argc, char *argv[])
{
    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);
    glutMouseFunc(mouse);

讀入音檔
#include<mmsystem.h>
#include "CMP3_MCI.h"
CMP3_MCI myMP3;
/* Program entry point */
void mouse(int button, int state, int x, int y)
{
    PlaySound("C:\\Users\\user\\Desktop\\Lesson32\\data/shot.wav",NULL,SND_ASYNC);
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1') PlaySound("DO.WAV",NULL,SND_ASYNC);
    if(key=='2') PlaySound("RE.WAV",NULL,SND_ASYNC);
    if(key=='3') PlaySound("MI.WAV",NULL,SND_ASYNC);
    if(key=='4') PlaySound("FA.WAV",NULL,SND_ASYNC);
    if(key=='5') PlaySound("SO.WAV",NULL,SND_ASYNC);
}
鍵盤數字觸發音樂
int main(int argc, char *argv[])
{
    myMP3.Load("C:\\Users\\user\\Desktop\\04160604/yukai.mp3");
    myMP3.Play();
音檔
glutKeyboardFunc(keyboard);
鍵盤音樂置入bin
音檔置入

2017年4月17日 星期一

Week 07 20170417

課堂作業一
下載 [data] [win32] [glut32.dll] [source] 壓縮檔並進行解壓縮到桌面
 [window] 檔案開啟並合併[data] [glut32.dll] 檔案到裡面
[source].zip 壓縮檔裡面找出 glm.h 及 glm.cpp 檔案並執行以下動作
課堂作業二
開啟Autodesk Maya之3D模型介面
開啟 Windows > Settings/Preferences > Plug-in Manager 並檢視 objExport.mll 是否有勾選(Loaded + Auto load)
開啟 File > Export All 做匯出的動作且另存新檔並改變儲存的檔案類型(改為OBJexport)

2017年4月10日 星期一

Week 06 20170410

作業一
法向量的運用
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, .0f, 1.0f };
const GLfloat light_position[] = { 50.0f, 10.0f, 4.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 };
int main(int argc, char *argv[])
float angle=0;
static void display(void)
{
        angle++;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glTranslatef(x,y,z);
        glRotatef(angle,0,1,0);
        (轉動函式)

        glutSolidTeapot(0.3);
    glPopMatrix();


    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    glutIdleFunc(display);
   (自動轉動)
    glutDisplayFunc(display);

一、茶壺旋轉
加入

float angle=0;
static void display(void)
{
    angle++;  /// 每次角度+1
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0,0.6,0);
        glRotatef(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutIdleFunc(display);  ///一直重複執行
}

二、打光
加入

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

int main(int argc, char *argv[])
{
    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;
}

以上都是打光程式碼

2017年3月27日 星期一

Week 05 20170327

熟悉轉動
Y軸=1,逆時針(右手拇指往上,其他指為轉動方向)
Y軸=-1,順時針(右手拇指往下,其他指為轉動方向)
X軸=1,右手姆指往右,其他指為轉動方向
X軸=-1,右手姆指往左,其他指為轉動方向
Z軸=1,右手拇指指向自己,其他指為轉動方向

Z軸=-1,右手拇指指向面前,其他指為轉動方向

熟悉移動及轉動的混合
移動後轉動
結果是車子在右邊自轉

先轉動後移動
結果是車子做周轉