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)期末作品



沒有留言:

張貼留言