2019電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2019年6月13日 星期四
2019第17週上課-06161196宋丹華
第17週課程內容:
A.期末作品展示
B.選票 / 加分 / 心得
C.學期回顧
D.Q & A
1.打分數+寫心得跟回饋~
2.期末作品介紹+影片連結:
期末作品介紹--->
雖然我的機器人跳舞沒有在音樂的節拍上面!!不過,我有盡量跟著拍子動。
我選的音樂是---高爾宣[沒了你]想選這首歌的動機為,不僅歌詞很貼近生活,也蠻有律動感的~
(2)程式操簡介:
這個期末作品,需要用到我們14週交的機器人作業來當基礎。可是因為我14週的機器人模型,打光沒有打好所以顏色出不來!!我選擇期末作品重做!!
我先把模型匯進去glut的專案裡面,因為顏色上還是有跑掉,所以有請老師幫我調一下!!接下來是匯入音樂檔案,確定模型跟音樂是同步的~
後來就是比較繁雜的寫檔跟讀檔。把動作的檔案利用w鍵寫出來、再用r鍵讀進去、最後用p/t鍵來播放檔案!!!
最後把動作串連一起,變成一個完整會跳舞的機器人了~
(3)回饋心得:
起初其實很想放棄這個做作品!!因為我是重新開始做,花了很多時間跟精神~
還記得做的第一天晚上,我熬夜到4點多,可是半個東西都沒有匯進去專案裡面。
心情上真的受到很大的挫折!!但是覺得還是不能放棄,都花時間重新建模了。
應該要好好完成到最後~隔天有問一下班上比較厲害的同學,問他看看還記不記得。
怎麼把模型匯進去不會有問題。然後,就跑去問老師打光的問題~~~
接下來就一步一步地完成,匯音樂、寫檔讀檔、連續動作等等,總共花了一個禮拜的時間好不容易完成的那刻,內心真的很激動哈哈哈 覺得很不真實,自己有辦法完成這項作業。
其實對老師真的很不好意思,因為我理解上很慢,常常看不懂老師寫的程式是甚麼意思?
然後就會一直問老師,占用到老師的休息時間跟吃飯時間!!!老師很抱歉啦~
不過,被老師教過真的懂了很多。也比較了解自己下一步該怎麼做囉~
謝謝老師給我們這個機會做這個做作品,可能出來的樣子不是很美!! 但至少知道怎麼做了才比較重要。 謝謝老師對我的幫忙^_^
影片連結--->
https://youtu.be/a6QmFvarcD0
彥の圖學筆記 Week15
電腦圖學
2019-05-30 Week15
(1) 主題:攝影機運鏡
Step1. 繪出模型
#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;
}
Step2. 模型打光
#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;
}
Step3. Timer函式:運鏡
#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
{
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;
}
(2) 主題:投影、矩陣
在Timer函式新增以下三行
2. glLoadIdentity();
3. glOrtho(-1,+1,-1,+1,-10,+10);
/// -10和+10就像是眼鏡,範圍不夠大,身體會斷東斷西
(3) 複習:位置移動&轉動
(4) 複習:背景貼圖
(5) 期末作業
訂閱:
文章 (Atom)