顯示具有 06163020_黃瑜珮 標籤的文章。 顯示所有文章
顯示具有 06163020_黃瑜珮 標籤的文章。 顯示所有文章

2019年6月29日 星期六

珮珮的學習日誌 Week17

電腦圖學 期末作品


影片連結:


(2)動作順暢版:<因為覺得先前那個動作太慢了,所以期末展示後就又重新做下調整>



1.程式操作簡介:利用codeblocks來撰寫程式,以及使用老師上課所使用的程式碼來做些變化,像是加入maya做的模型放進去,然後利用T-R-T的程式讓各個手臂關節可以跟隨著鍵盤來動各個部位,還有把自己找到的音樂檔隨著機器人的動作一起做播放。

2.使用codeblocks播放機器人動作:首先按下w可以把動作存下,如果存完全部動作後再關掉重按build and run,再按下p就可以播放剛剛儲存的舞步。


3.作品簡介:裡面套用的模型是自己用MAYA所製作而成,背景音樂所選擇的是日本團體AAA的Party it up(去人聲版),採用自己喜歡的偶像來做挑選。而取用這個星空背景圖是因為這首歌的氣息其實是帶種神祕氣息又帶點美妙的,就算在各自的出道選拔到現在經歷了不少挫折也仍然繼續向前,並散發出屬於團體裡7個人光芒的廣大星空,以成就了現在的他們。

4.回饋心得:經過這次的機器人作品,讓我知道可以用程式碼來讓機器人動真的很不可思議,原先還以為自己無法完成這個作品,因為在這操作過程中遇到了不少的問題,還有個瞬間覺得自己最後可能完成不大了,蠻有挫折感的,但是後來經過同學及老師的協助,終於完成這個期末作品,我真的很開心。然後我希望老師上課時可以放慢點腳步來上,有時候我們無法一下子吸收那麼多去理解個行程式碼的定義是什麼,這學期老師辛苦了~~如果下次還有這個機會,我蠻希望能再嘗試看看,試著把作品做到最好的形式給大家看。





2019年6月6日 星期四

珮珮學習日誌 Week16

電腦圖學 Week16

(1)作業:Q&A

(2)複習:貼圖

(3)複習:打光

(4)複習:模型

實作:OpenCV+OpenGL貼圖
然後從Google Chrome上下載OpenCV2.0(2008)<中間那個><<安裝完OpenCV 2.1之後才可以打開Codeblocks,因為PATH要對才會到C:\OpenCV2.1\bin,找dll檔才會對>>
先把你剛載下的圖片存到freeglut裡的bin



接下來再回到codeblocks裡
你的檔案按右鍵找到build options,找到Search directories按Add 打C:\\OpenCV2.1\include
好了後再按Linker settings
按Add打C:\\OpenCV2.1\lib\cv210.lib  
               C:\\OpenCV2.1\lib\cxcore210.lib
               C:\\OpenCV2.1\lib\highgui210.lib






把貼圖放在茶壺裡面

程式碼如下:


#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖
///程式碼是對的, 但是沒有設定好include, lib, bin
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
GLuint id;
void myInit()
{
    glEnable(GL_TEXTURE_2D);
    IplImage * img = cvLoadImage("marvel.jpg");
    glGenTextures(1, &id );
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_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);
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    myInit();///我們的貼圖在這裡

    glutDisplayFunc(display);

    glutMainLoop();///之前
}

第二個程式碼是關於旋轉及材質茶壺<共有3個貼圖>

#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); ///貼圖需要它
    glEnd();///貼圖需要它

    glBindTexture(GL_TEXTURE_2D, id3);///id3 for rotating square
    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);
        glRotatef(a++, 0, 0, 1);
        glScalef(0.3, 0.3, 0.3);
        glBegin(GL_POLYGON);
            glTexCoord2f(0, 0); glVertex3f(-1, +1, 0);
            glTexCoord2f(0, 1); glVertex3f(-1, -1, 0);
            glTexCoord2f(1, 1); glVertex3f(+1, -1, 0);
            glTexCoord2f(1, 0); glVertex3f(+1, +1, 0);
        glEnd();
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, id2);///id2 for teapot
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_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); ///貼圖需要它
    return id;///貼圖需要它
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它///背景圖片
    id2 = myTexture("teapot.jpg");///茶壺外的圖片
    id3 = myTexture("square.jpg");///旋轉的圖片

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();///之前
}


三、把模型匯進去裡面的程式碼

準備動作:


TODO:首先先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 這個網站

下載:windows.zip解壓縮並下載\windows\Projection.exe

data.zip 解壓縮並下載\windows\data\圖檔

glut32.dll 下載\windows\glut32.dll


再回到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 這個網站下載source檔案

找到glm.c glm.h projection.c把這些放到week15這個資料夾裡
同時把glm.c改成glm.cpp


然後弄完步驟後再把windows裡的data複製到freeglut裡的bin裡(這樣才能掃到模型)


接下來再把projection.c用notepad++來打開複製到codeblocks裡的main.cpp
再按week16 以add flies的方式把glm.cpp加進來,便可呈現出下面的畫面。



#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;

#include "glm.h"///呼叫外掛 ///glm需要它
GLMmodel * pmodel=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); ///貼圖需要它
    glEnd();///貼圖需要它

    if (!pmodel) { ///glm需要它
        pmodel = glmReadOBJ("data/flowers.obj"); ///glm需要它
        if (!pmodel) exit(0); ///glm需要它
        glmUnitize(pmodel); ///glm需要它
        glmFacetNormals(pmodel); ///glm需要它
        glmVertexNormals(pmodel, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a++, 0,1,0);
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_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); ///貼圖需要它
    return id;///貼圖需要它
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f }; ///glm需要它
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);    ///glm需要它

    glEnable(GL_LIGHT0);  ///glm需要它
    glEnable(GL_NORMALIZE); ///glm需要它
    glEnable(GL_COLOR_MATERIAL); ///glm需要它
    glEnable(GL_LIGHTING); ///glm需要它

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient); ///glm需要它
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse); ///glm需要它
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它
    glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它


    glutMainLoop();///之前
}



2019年5月30日 星期四

珮珮學習日誌 Week15

電腦圖學

(1)主題:攝影機,運鏡


準備動作:


TODO:首先先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 這個網站

下載:windows.zip解壓縮並下載\windows\Projection.exe

data.zip 解壓縮並下載\windows\data\圖檔

glut32.dll 下載\windows\glut32.dll





eye-眼睛去看主角(移動鏡頭)
center-定在畫面中心
up -拍攝過去的角度(不管你轉向哪邊就往哪個方向)



再回到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 這個網站下載source檔案

找到glm.c glm.h projection.c把這些放到week15這個資料夾裡
同時把glm.c改成glm.cpp


然後弄完步驟後再把windows裡的data複製到freeglut裡的bin裡(這樣才能掃到模型)




接下來再把projection.c用notepad++來打開複製到codeblocks裡的main.cpp
接下來再按week15 以add flies的方式把glm.cpp加進來,便可呈現出下面的畫面。




然後用codeblocks的方式讓人的模型可以利用寫程式顯示出來

程式碼如下:

#include <GL/glut.h>///GLUT 外掛 #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized() 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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawmodel(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(512,512); glutInitWindowPosition(50, 50); glutCreateWindow("week15"); // glutReshapeFunc(reshape); glutDisplayFunc(display); glutMainLoop(); return 0; }





打光模型程式碼

#include <GL/glut.h>///GLUT 外掛 #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized() 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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawmodel(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(512,512); glutInitWindowPosition(50, 50); glutCreateWindow("week15"); // glutReshapeFunc(reshape); glutDisplayFunc(display); GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 }; glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glutMainLoop(); return 0; }


轉動模型程式碼


#include <GL/glut.h>///GLUT 外掛 #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized() 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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawmodel(); glutSwapBuffers(); } #include <math.h>///for sin() cos() ///NOW3 float eyeX=0.5, eyeY=0, eyeZ=0; ///NOW3 void timer(int t)///NOW3 { float angle = (t/180.0)*3.1415926; ///NOW3 eyeX=0.5*cos(angle); ///NOW3 eyeZ=0.5*sin(angle); ///NOW3 glutTimerFunc(33, timer, t+1);///NOW3 glMatrixMode(GL_MODELVIEW);///NOW3 glLoadIdentity();///NOW3 gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3 0, 0, 0,///center ///NOW3 0, 1, 0);///up ///NOW3 glutPostRedisplay();///NOW3 } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(512,512); glutInitWindowPosition(50, 50); glutCreateWindow("week15"); // glutReshapeFunc(reshape); glutDisplayFunc(display); glutTimerFunc(33, timer, 0);///NOW3 GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 }; glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glutMainLoop(); return 0; }
#include <GL/glut.h>///GLUT 外掛 #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized() 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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawmodel(); glutSwapBuffers(); } #include <math.h>///for sin() cos() ///NOW3 float eyeX=0.5, eyeY=0, eyeZ=0; ///NOW3 void timer(int t)///NOW3 { glMatrixMode(GL_PROJECTION); ///NOW4 glLoadIdentity(); ///NOW4 glOrtho(-1, +1, -1,+1, -10,+10); ///NOW4 你可以看到 -10...+10範圍 float angle = (t/180.0)*3.1415926; ///NOW3 eyeX=0.5*cos(angle); ///NOW3 eyeZ=0.5*sin(angle); ///NOW3 glutTimerFunc(33, timer, t+1);///NOW3 glMatrixMode(GL_MODELVIEW);///NOW3 glLoadIdentity();///NOW3 gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3 0, 0, 0,///center ///NOW3 0, 1, 0);///up ///NOW3 glutPostRedisplay();///NOW3 } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(512,512); glutInitWindowPosition(50, 50); glutCreateWindow("week15"); // glutReshapeFunc(reshape); glutDisplayFunc(display); glutTimerFunc(33, timer, 0);///NOW3 GLfloat light_pos[] = { 0.0, 0.0, 1.0, 0.0 }; glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glutMainLoop(); return 0; }



#include <GL/glut.h>///GLUT 外掛 #include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized() 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(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawmodel(); glutSwapBuffers(); } #include <math.h>///for sin() cos() ///NOW3 float eyeX=2, eyeY=0, eyeZ=0; ///NOW3 void timer(int t)///NOW3 { glMatrixMode(GL_PROJECTION); ///NOW4 glLoadIdentity(); ///NOW4 ///glOrtho(-1, +1, -1,+1, -10.0,10.0); ///NOW4 你可以看到 -10...+10範圍 gluPerspective(60, 1.0, 0.001, 1000);///NOW5 float angle = (t/180.0)*3.1415926; ///NOW3 eyeX=2*cos(angle); ///NOW3 eyeZ=2*sin(angle); ///NOW3 glutTimerFunc(33, timer, t+1);///NOW3 glMatrixMode(GL_MODELVIEW);///NOW3 glLoadIdentity();///NOW3 gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3 0, 0, 0,///center ///NOW3 0, 1, 0);///up ///NOW3 glutPostRedisplay();///NOW3 } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(512,512); glutInitWindowPosition(50, 50); glutCreateWindow("week15"); // glutReshapeFunc(reshape); glutDisplayFunc(display); glutTimerFunc(33, timer, 0);///NOW3 GLfloat light_pos[] = { 0.0, 0.0, 1.0, 0.0 }; glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glutMainLoop(); return 0; }



(2)主題:投影、矩陣

(3)複習:位置移動vs.轉動

(4)複習:背景貼圖

(5)期末作品