顯示具有 05160630_阮致峰 標籤的文章。 顯示所有文章
顯示具有 05160630_阮致峰 標籤的文章。 顯示所有文章

2018年6月22日 星期五

week15 阮致峰

(下週要交期末作品)

複習:


Week01 :
(1)建WebGL專案
(2)跑OPENGL專案

Week02 :
(1)建GLUT專案(要有freeglut.dll)
(2)將GLUT專案(六個圖)的177行程式碼縮減約20行
(3) 用10行寫出茶壺 ( glutSolidTeapot ( x ) )

Week03 :移動(translatef) 旋轉(rotatef) 放大縮小(scalef)
glutSolidTeapot(半徑)
glutSolidSphere(半徑,切,切)
glutSolidCone(o,o,o)    
 

Week04 : 旋轉(Rotate),矩陣(Matrix)

Week05 : T-R-T特定軸轉動(TRT之後才能做旋轉)

Week06 : glm 3D模型 
#include"glm.h"
 GLM * pmodel=NULL
       if(pmodel==NULL)
{
       glmReadOBJ("....")
       glmUnitize()///縮放
}
glmDraw("pmodel");///畫出pmodel
*****舊的strdup()會不相容

Week07 : 
(1)CodeBlocks>setting->compiler設定要對才可以運行glm.cpp compiler
(2)working_dir設成"."(儲存路徑)
(3)libfreeglut.dll 專案目錄copy

Week08 :
(1)模型打光 
(2)陣列

Week10 貼圖:OpenCV (在moodle的moodle上課所需的軟體可以載)
(1)安裝OpenCV
(2)設目錄link
(3)完成

Week11 : 
(1)鍵盤鋼琴
(2)貼上聲音

week14 阮致峰

1.

到jsyeh.org/3dcg10下載window data glut32.dll

2.

gluPerspective( fovy, aspecy zNear, zFar)
fovy:張開角度
aspecy:長寬比
zNear:近的
zFar:遠的
glutReshapeFunc(resize);
改變視窗大小時,圖不會變形

Step3:
GLUT專案
tatic 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() ;
    gluLookAt(0,3,3, 0,0,0, 0,1,0);
}
gluLookAt(0,3,3, 0,0,0, 0,1,0);

2018年5月21日 星期一

week13 阮致峰

1.開啟新的codeblocks


2.輸入程式碼
#include <stdio.h>
int main()
{
    FILE * fout = fopen("output.txt","w+");

    printf("Hellow world\n");

    fprintf(fout,"Hellow world\n");
}


3.讀入角度
#include <stdio.h>
float angle=0,angle2=10,angle3=90;
int main()
{
    FILE * fout = fopen("output.txt","w+");
    ///printf("Hellow world\n");
    fprintf(fout,"%.3f %.3f %.3f\n",angle,angle2,angle3);
}


4.寫程式碼 讓茶壺可以拉動
#include <GL/glut.h>
#include <stdio.h>
float angle=0;
int oldX=0;
FILE * fout = NULL;
void mouse(int button,int state, int x,int y)
{
    oldX=x;
}
void motion(int x,int y)
{
    angle += x-oldX;
    oldX=x;
    if(fout==NULL)
    {
        fout = fopen("output.txt","w+");
    }
    fprintf(fout,"%.3f\n",angle);
    printf("%.3f\n",angle);
    glutPostRedisplay();
}
void display()///以下是老師提供的
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glutSolidTeapot(0.3);///正中間,當成身體的茶壼
        glPushMatrix();
            glTranslatef(0.4, 0,0);///掛上去
            glRotatef(angle, 0,0,1);///
            glTranslatef(0.4, 0,0);///把柄放中間
            glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
///上面是我們增加的程式碼
///打光的部分留著 (陣列,main() ) 其他都刪掉
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 };

/* Program entry point */

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

    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    ///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;
}

2018年5月14日 星期一

week12 阮致峰

複習上周內容(播聲音以及更改glut目錄)
#include <mmsystem.h>
    PlaySound("Shot.wav",NULL,SND_ASYNC);


<Option working_dir="." />
""裡改成 .


解決 PlaySound(); 不能播 mp3 格式的問題
#include "CMP3_MCI.h" ///""代表在當前路徑的標頭檔
CMP3_MCI my; ///宣告一個 CMP3_MCI 的物件變數 叫 my
    my.Load("Stop it. Get some help..mp3");
    my.Play();


加入timer 
glutTimerFunc();函式


內插公式: 交叉相乘


內插結合timer







2018年5月7日 星期一

week11 阮致峰

1. 從moodle下載上課用的檔案並拉到桌面



2.複製libfreeglut複製並改黨名



3.在網路上下載一個wav(聲音檔)要注意目錄



4.開glut檔



5.加入聲音的程式碼



6.這一行如果改成SND_SYNC會等人



7.開啟一個concole專案



8.加入外掛及聲音的程式碼(windows一定要在mmsystem前面)



9.開啟build option



10.新增winmm



11.把音檔加到自己的目錄



12.如果改成SND_ASYNC就不能太快結束 ------>(SND_SYNC要等 SND_ASYNC不要等)



13.輸入數字音樂就結束了(因為程式碼跑完了)



14.在glut那個專案裡新增鋼琴程式碼(鋼琴開始)
        case '1' : PlaySound("Do.wav",NULL,SND_ASYNC);
        break;
        case '2' : PlaySound("Re.wav",NULL,SND_ASYNC);
        break;
        case '3' : PlaySound("Mi.wav",NULL,SND_ASYNC);
        break;
        case '4' : PlaySound("Fa.wav",NULL,SND_ASYNC);
        break;
        case '5' : PlaySound("Sol.wav",NULL,SND_ASYNC);
        break;
        case '6' : PlaySound("La.wav",NULL,SND_ASYNC);
        break;
        case '7' : PlaySound("Si.wav",NULL,SND_ASYNC);
        break;



15.把音檔放入freeglut的資料夾(鋼琴結束)



16.從moodle下載lesson32(射擊遊戲開始)



17.借用wav檔



18.新增程式碼



19.按左鍵有Shot的聲音(射擊遊戲結束)

2018年4月30日 星期一

week10 阮致峰

1.到jsyeh.org/3dcg10下載data , windows32 , glut32.dll


2.解壓縮到windows , 複製glut32到windows資料夾裡 , 複製data到windows資料夾裡


3.到jsyeh.org/3dcg10下載source(到moodle下載opencv , freeglut)


4.把freeglut解壓縮到桌面 , 複製libfreeglut改成libglut32.a


5.開起codeblocks的glut專案後對專案點右鍵開啟build options


6.在Search dirctories的compiler新增目錄


7.在Linker settings新增


8.在Search dirctories的Linker新增目錄


9.在網路上找一張圖片(改名為image,因為程式讀檔是讀名為image的檔案)
並把檔案放在C:\Users\user\Desktop\freeglut\bin


10.寫程式讀入圖片
(#include <opencv/highgui.h>)
IplImage * img = cvLoadImage("image.png");///宣告指標,讀入圖檔(附檔名也要一樣)
    cvNamedWindow("week10opencv");
    cvShowImage("week10opencv",img);
    cvWaitKey(0);


11.測試


結果:會先讀入圖片,再跑程式碼
/
/
/
/
/
/
/
/
/
/
//
1.從moodle下載earth

2.複製freeglut.dll和一張名為image的圖片到myEarth的資料夾裡

3.如果要改附檔名或檔名要用codeblocks開(直接把myEarth.cbp拉進去然後再改上面6~8步驟)
後,進入bin把myEarth新檔拉出來覆蓋舊檔就可以執行了

4.執行