2018-06-04
Week15
(1)下週期末作品展示
(2)主題:學期內容回顧
(3)問題Q&A
TODO:
Week1:
1.WebGL
2.跑OpenGL
Week2:
1.GLUT專案
Week3:
移動旋轉縮放
跑Transformation.exe
glutSolidTeapot(半徑)
glutSolidSpagere(半徑,切,切)
gltuSolidCone(半徑,切,切)
Week4:Rotate,矩陣
Week5:T-R-T,特定軸
Week6:glm 3D模型
#include "glm.h"
GLM *pmodel = NULL
畫圖:
(
if(pmodel==NULL)
///讀入模型
{
glmReadOBJ("...");
縮放,glmUnitize(),法向量.
}
glmDran()
小心舊的 Strdup()會不相容
Week7:
小心 CodeBlocks專案 & Setting-Compiler
要設對glm.cpp 才行compile
Working_dir要設成"."
libfreeglut.dll COPE>>專案目錄
Week8:打光.陣列
Week10:
貼圖
OpenCV
設目錄link
秀圖
Week11:
keyboard配PlaySound()變成鍵盤鋼琴
mouse配PlaySound()變成射擊遊戲
CMP3_MCI.h可撥MP3
2018電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2018年6月4日 星期一
2018年5月28日 星期一
Week14_馬明
2018-05-28
Week14
(1)作業四Q&A(擺Pose檔)
(2)主題:攝影機,投影矩陣
(3)實作:gulLookAt(),glutReshapeFunc()
(4)期末作品
TODO:至jsyeh.org/3dcg10/下載
1.win32
2.glut32.dll
3.data

glOrtho視景窗(可以看到哪)
gluLookAt(看哪裡)
TODO:應該可以看懂整個範例檔了
File-New-Project,GULT
看glutReshapeFunc(resize);
視窗若有大小,要改變投影的設定值,投影才不會變形



TODO:期末作品講解,動起來
動畫部分:
比較完整的程式碼:

太重要了所以傳上來的上課錄影(關於動畫):
Week14
(1)作業四Q&A(擺Pose檔)
(2)主題:攝影機,投影矩陣
(3)實作:gulLookAt(),glutReshapeFunc()
(4)期末作品
TODO:至jsyeh.org/3dcg10/下載
1.win32
2.glut32.dll
3.data
glOrtho視景窗(可以看到哪)
gluLookAt(看哪裡)
TODO:應該可以看懂整個範例檔了
File-New-Project,GULT
看glutReshapeFunc(resize);
視窗若有大小,要改變投影的設定值,投影才不會變形
TODO:期末作品講解,動起來
| S鍵儲存座標,R可以讀取座標 |
| 幫關節編號(按下1切換到1號關節,按下2切換2號關節..) |
| 重畫畫面 |
| 計時器 |
| 按下P播放 |
太重要了所以傳上來的上課錄影(關於動畫):
2018年5月21日 星期一
Week13_馬明
2018-05-21
Week13
(1)主題:寫檔案、讀檔
(2)主題:控制關節
(3)主題:動作內插
TODO:寫檔讀檔
(1)File-New-Enpty File (Ctrl-Shift-N)
另存新檔(File-SaveAs) file.cpp
(2)
#include<stdio.h>
int main()
{
FILE*fout = fopen("output.txt","w+");
///FILE * 檔案指標fout
/// 檔案file
/// open開啟
/// "要開啟的檔名,"w+"表示要寫的/+檔案
///printf("Hello World"); 大一上程式設計第一周
///fprintf(fout,"Hello World");///大一下交過.大二下正式用
fprintf(fout,"%.3f %.3f %.3f\n",angle,angle2,angle3);
}///要寫出許多關節角度,就用許多 %.3f 對應後面的變數
///前面有幾個%%% 後面就有幾個變數,%.3f表示是float且小數點後3位

TODO:控制關節
(1)File-New-Project,GLUT專案
下載week13_main.cpp
取代專案中程式
(2)最上面加
#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+");
}//檔案會在freeglut的bin
printf("%.3f\n",angle);
fprintf(fout,"%.3f\n",angle);
glutPostRedisplay();
}

(3)
int main()中的
glutCreateWindow("GLUT Shapes");
下面加上兩行
glutMouseFunc(mouse);
glutMotionFunc(motion);
來控制茶壺

TODO:動作內插
#include <GL/glut.h>
#include <stdio.h>
FILE * fout=NULL;///TODO:檔案一開始是空的 NULL
FILE * fin=NULL;///Now3: in檔案一開始是空的 NULL
//float angle=0, angle2, angle3, angle4, angle5, angle6;
float angle[20]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};///Now4: 用陣列
int oldX=0, now=0;///angle[now]
void keyboard(unsigned char key, int x, int y)///Now3: 要記得main()註冊
{///Now3: 用keyboard來讀入動畫資料
if(key=='1') now=1;///按1就會改變1號關節
if(key=='2') now=2;///按2就會改變3號關節
if(key=='3') now=3;
if(key=='4') now=4;
if(key=='5') now=5;
if(key=='6') now=6;
if(key=='7') now=7;
if(key=='8') now=8;
if(key=='9') now=9;
if(key=='r' || key=='R'){///Now4: 按'r'才會讀入關節的角度,一次讀20個
if(fin==NULL){///Now3: TODO:一開始是空指標,所以會進來if(..)
fin=fopen("output.txt", "r");///Now4: r表示讀入read
}
for(int i=0;i<20;i++) fscanf(fin, "%f", &angle[i]);///Now4: 用陣列從檔案fin讀進來
}
if(key=='w' || key=='W' || key=='s' || key=='S'){///Now4: 按's'才會寫關節的角度,一次20個
if(fout==NULL){///TODO:一開始是空指標,所以會進來if(..)
fout = fopen("output.txt", "w+");///第一節教的開檔
}///TODO:之後就不再是空指標了
for(int i=0;i<20;i++) fprintf(fout, "%.3f\n", angle[i]);///TODO:把角度印到檔案裡
}
// fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
// &angle[0], &angle[1], &angle[2], &angle[3], &angle[4], &angle[5],
// &angle[6], &angle[7], &angle[8], &angle[9], &angle[10], &angle[11],
// &angle[12], &angle[13], &angle[14], &angle[15], &angle[16], &angle[17],
// &angle[18], &angle[19] );
glutPostRedisplay();///Now3: 讀入資料,馬上重畫
}
void mouse(int button, int state, int x, int y)
{///TODO
oldX=x;
}///TODO
void motion(int x, int y)///TODO: 用mouse motion來改關節angle
{///TODO:
angle[now] += x-oldX; ///角度稍微增減, 以前教過把大象放到冰箱去的程式碼
oldX=x;///把舊的更新成新的
glutPostRedisplay();///TODO:重畫畫面
}
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,0,1);///
glTranslatef(0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPushMatrix();
glTranslatef(0.4, 0,0);///掛上去
glRotatef(angle[1], 0,0,1);///
glTranslatef(0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4, 0,0);///掛上去
glRotatef(angle[2], 0,0,1);///
glTranslatef(-0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPushMatrix();
glTranslatef(-0.4, 0,0);///掛上去
glRotatef(angle[3], 0,0,1);///
glTranslatef(-0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPopMatrix();
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");
///我們準備3個函式註冊好
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
///我們準備3個函式註冊好
///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;
}
Week13
(1)主題:寫檔案、讀檔
(2)主題:控制關節
(3)主題:動作內插
TODO:寫檔讀檔
(1)File-New-Enpty File (Ctrl-Shift-N)
另存新檔(File-SaveAs) file.cpp
(2)
#include<stdio.h>
int main()
{
FILE*fout = fopen("output.txt","w+");
///FILE * 檔案指標fout
/// 檔案file
/// open開啟
/// "要開啟的檔名,"w+"表示要寫的/+檔案
///printf("Hello World"); 大一上程式設計第一周
///fprintf(fout,"Hello World");///大一下交過.大二下正式用
fprintf(fout,"%.3f %.3f %.3f\n",angle,angle2,angle3);
}///要寫出許多關節角度,就用許多 %.3f 對應後面的變數
///前面有幾個%%% 後面就有幾個變數,%.3f表示是float且小數點後3位
TODO:控制關節
(1)File-New-Project,GLUT專案
下載week13_main.cpp
取代專案中程式
(2)最上面加
#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+");
}//檔案會在freeglut的bin
printf("%.3f\n",angle);
fprintf(fout,"%.3f\n",angle);
glutPostRedisplay();
}
(3)
int main()中的
glutCreateWindow("GLUT Shapes");
下面加上兩行
glutMouseFunc(mouse);
glutMotionFunc(motion);
來控制茶壺
TODO:動作內插
#include <GL/glut.h>
#include <stdio.h>
FILE * fout=NULL;///TODO:檔案一開始是空的 NULL
FILE * fin=NULL;///Now3: in檔案一開始是空的 NULL
//float angle=0, angle2, angle3, angle4, angle5, angle6;
float angle[20]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};///Now4: 用陣列
int oldX=0, now=0;///angle[now]
void keyboard(unsigned char key, int x, int y)///Now3: 要記得main()註冊
{///Now3: 用keyboard來讀入動畫資料
if(key=='1') now=1;///按1就會改變1號關節
if(key=='2') now=2;///按2就會改變3號關節
if(key=='3') now=3;
if(key=='4') now=4;
if(key=='5') now=5;
if(key=='6') now=6;
if(key=='7') now=7;
if(key=='8') now=8;
if(key=='9') now=9;
if(key=='r' || key=='R'){///Now4: 按'r'才會讀入關節的角度,一次讀20個
if(fin==NULL){///Now3: TODO:一開始是空指標,所以會進來if(..)
fin=fopen("output.txt", "r");///Now4: r表示讀入read
}
for(int i=0;i<20;i++) fscanf(fin, "%f", &angle[i]);///Now4: 用陣列從檔案fin讀進來
}
if(key=='w' || key=='W' || key=='s' || key=='S'){///Now4: 按's'才會寫關節的角度,一次20個
if(fout==NULL){///TODO:一開始是空指標,所以會進來if(..)
fout = fopen("output.txt", "w+");///第一節教的開檔
}///TODO:之後就不再是空指標了
for(int i=0;i<20;i++) fprintf(fout, "%.3f\n", angle[i]);///TODO:把角度印到檔案裡
}
// fscanf(fin, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
// &angle[0], &angle[1], &angle[2], &angle[3], &angle[4], &angle[5],
// &angle[6], &angle[7], &angle[8], &angle[9], &angle[10], &angle[11],
// &angle[12], &angle[13], &angle[14], &angle[15], &angle[16], &angle[17],
// &angle[18], &angle[19] );
glutPostRedisplay();///Now3: 讀入資料,馬上重畫
}
void mouse(int button, int state, int x, int y)
{///TODO
oldX=x;
}///TODO
void motion(int x, int y)///TODO: 用mouse motion來改關節angle
{///TODO:
angle[now] += x-oldX; ///角度稍微增減, 以前教過把大象放到冰箱去的程式碼
oldX=x;///把舊的更新成新的
glutPostRedisplay();///TODO:重畫畫面
}
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,0,1);///
glTranslatef(0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPushMatrix();
glTranslatef(0.4, 0,0);///掛上去
glRotatef(angle[1], 0,0,1);///
glTranslatef(0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4, 0,0);///掛上去
glRotatef(angle[2], 0,0,1);///
glTranslatef(-0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPushMatrix();
glTranslatef(-0.4, 0,0);///掛上去
glRotatef(angle[3], 0,0,1);///
glTranslatef(-0.4, 0,0);///把柄放中間
glutSolidTeapot(0.3);///右邊,當成手臂的茶壼
glPopMatrix();
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");
///我們準備3個函式註冊好
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
///我們準備3個函式註冊好
///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_馬明
2018-05-14
Week12
(1)小考:T-R-T觀念
(2)上周:PlaySound,MP3播放
(3)主題:計時器Timer
(4)主題:內插,線性內插,動畫
TODO:複習上週
(1)開啟GLUT專案
(2)把CodeBlocks Project.cbp檔用Notepad++開啟,其中working-dir="C://..."改成"."

(3)把freeglut32.dll複製到專案目錄
(4)加程式碼
*/
#include <mmsystem.h>
PlaySound("Shot.wav",NULL,SND_ASYNC);
(1)放在專案用一目錄中(MP3檔也是)
#include "CMP3_MCI.h"
CMP3_MCI my.MP3;
int main(...)
{
myMP3.load("123.mp3");
myMP3.Play();
}

TODO:每天早上起床的儀式(計時器)
鬧鐘響一起床一撥鬧鐘繼續睡
*/
void timer(int t)
{
glutTimerFunc(2000,timer,0);
PlaySound("Shot.wav",NULL,SND_ASYNC);
}
int main(...)
{
.
.
.
glutCreateWindow("...");
glutTimerFunc(7000,timer,0);//一定要加在glutCreateWindow之後
}
/*

TODO:內插、線性內插
新*d+舊*(1-d)=內插


TODO:動畫(下周待續)


Week12
(1)小考:T-R-T觀念
(2)上周:PlaySound,MP3播放
(3)主題:計時器Timer
(4)主題:內插,線性內插,動畫
TODO:複習上週
(1)開啟GLUT專案
(2)把CodeBlocks Project.cbp檔用Notepad++開啟,其中working-dir="C://..."改成"."
(3)把freeglut32.dll複製到專案目錄
(4)加程式碼
*/
#include <mmsystem.h>
PlaySound("Shot.wav",NULL,SND_ASYNC);
/*
TODO:在Moodle下載 CMP3_MCI.h(1)放在專案用一目錄中(MP3檔也是)
#include "CMP3_MCI.h"
CMP3_MCI my.MP3;
int main(...)
{
myMP3.load("123.mp3");
myMP3.Play();
}
TODO:每天早上起床的儀式(計時器)
鬧鐘響一起床一撥鬧鐘繼續睡
*/
void timer(int t)
{
glutTimerFunc(2000,timer,0);
PlaySound("Shot.wav",NULL,SND_ASYNC);
}
int main(...)
{
.
.
.
glutCreateWindow("...");
glutTimerFunc(7000,timer,0);//一定要加在glutCreateWindow之後
}
/*
TODO:內插、線性內插
新*d+舊*(1-d)=內插
TODO:動畫(下周待續)
2018年5月7日 星期一
Week11_馬明
2018-05-07
右鍵專案找到Build option>>Project build options>>Linker setting>>Add輸入winmm

glPushMatrix();/// (0)10分
glTranslatef(-0.5,0.35,0);///(4)20分,畫上去,最簡單,要3個參數
glRotatef(-angle,0,0,1);///(3)glRotatef(angle,0,0,-1);20分
Week11
(1)主題:聲音/音效.音樂
(2)實作:PlaySound,CMP3_MCI.j
(3)鍵盤鋼琴,射擊遊戲
(4)複習貼+TRT,下週小考
TODO:測試
#include <stdio.h>//(a)多媒體系統
int main(...)
{
PlaySound("聲音.WAV",NULL,SNA,ASYNC);
}
TODO:
1.把聲音檔,先放Freeglut\bin
2.+Code
2.+Code
---------------
TODO:File-New-Project貝殼專案
音檔要放進專案資料夾
ASYNC是會等不會直接往下跑
SYNC是不等直接往下跑
#include<windows.h>
#include<mmsystem.h>///以上順序很重要
#include<stdio.h>
int main()
{
PlaySound("聲音.WAV",NULL,SND_ASYNC);
printf("Hello Please Input:");
int n;
scanf("%d",&n);
}
右鍵專案找到Build option>>Project build options>>Linker setting>>Add輸入winmm
-----
TODO:鍵盤鋼琴
使用GLUT,音檔一樣放入freeglut
#include<mmsystem.h>
static void key(unsigned char key, int x, int y)
{
switch (key)
{
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;
-----
TODO:下週的小考練習
glPushMatrix();/// (0)10分
glTranslatef(-0.5,0.35,0);///(4)20分,畫上去,最簡單,要3個參數
glRotatef(-angle,0,0,1);///(3)glRotatef(angle,0,0,-1);20分
glTranslatef(-0.3,0,0);///(2)先20分,倒過來,讓圓圈圈放到中心去
drawArm();///(1)程式從下往上寫20分
glPopMatrix();///(0)10分
drawArm();///(1)程式從下往上寫20分
glPopMatrix();///(0)10分
2018年4月30日 星期一
Week10_馬明
2018-04-30
Week10
(1)貼圖
(2)實作:OpenCV讀圖秀圖
(3)實作:OpenGL貼圖
(4)期中考試
(5)回家作業HW3截止
TODO:最簡單的讀圖方法
載moodle/上課用軟體/Open CV(要選第二個點點)

-
Codeblock
加上
1.#include <copencv/highgui.h> ///呼叫OpenCU外掛
2.build Option>>Search directones>>Compiler>>Add 放OpenCV2.1\include

3.build Option>>Search directones>>Linker>>Add C:\OpenCV2.1\lib
4.build Option>>Linker settings>>放cv210,cxore210,highgui210
5.+Code

-----------------------------------------------------------------------------------
TODO:Moodle下載myEarth.zip解壓縮
(此檔有問題)
(1)缺freeglut.dll
(2)缺image.jpg
1.先用Notepad++編輯myEarth.cbp

2.複製freeglut.dll進myEarth資料夾
3.上網找地圖改名image.jpg放入
開啟exe檔
地球轉起來

Week10
(1)貼圖
(2)實作:OpenCV讀圖秀圖
(3)實作:OpenGL貼圖
(4)期中考試
(5)回家作業HW3截止
TODO:最簡單的讀圖方法
載moodle/上課用軟體/Open CV(要選第二個點點)
-
Codeblock
加上
1.#include <copencv/highgui.h> ///呼叫OpenCU外掛
2.build Option>>Search directones>>Compiler>>Add 放OpenCV2.1\include
3.build Option>>Search directones>>Linker>>Add C:\OpenCV2.1\lib
4.build Option>>Linker settings>>放cv210,cxore210,highgui210
5.+Code

-----------------------------------------------------------------------------------
TODO:Moodle下載myEarth.zip解壓縮
(此檔有問題)
(1)缺freeglut.dll
(2)缺image.jpg
1.先用Notepad++編輯myEarth.cbp
2.複製freeglut.dll進myEarth資料夾
3.上網找地圖改名image.jpg放入
開啟exe檔
地球轉起來
2018年4月16日 星期一
Week08_馬明
2018-04-16
(1)主題:打光
(2)期中模擬考
(3)T-R-T小考
(4)回家作業:3DModel會動(最少1個關節)
(5)Recap
(1)打光的範例Light Materual.exe
(2)CodeBlock . File-New-Project, GLUT
(3)把上周3D Model.放進去
C:\users\user\desktop\freeglut\bin\data\porscge.obj
#include <glm.h>
GLMmodel *pmodel=NULL;
畫模型

關切面

*/
glEnable(GL_LIGHT0);//打開Light 0 打光
glEnable(GL_NORMALIZE);//打開法向量Normal Vector Normalize 長度變成1 才好打光
glEnable(GL_COLOR_MATERIAL);//打開下面的glLight & glMaterial
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);//留下剛剛GLUT範例的打光函式,8行
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);//GLUT範例的打光函式
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);//GLUT範例的打光函式
glLightfv(GL_LIGHT0, GL_POSITION, light_position);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);//GLUT範例的打光函式
(1)打光的範例Light Materual.exe
(2)CodeBlock . File-New-Project, GLUT
(3)把上周3D Model.放進去
C:\users\user\desktop\freeglut\bin\data\porscge.obj
#include <glm.h>
GLMmodel *pmodel=NULL;
畫模型
關切面
*/
glEnable(GL_LIGHT0);//打開Light 0 打光
glEnable(GL_NORMALIZE);//打開法向量Normal Vector Normalize 長度變成1 才好打光
glEnable(GL_COLOR_MATERIAL);//打開下面的glLight & glMaterial
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);//留下剛剛GLUT範例的打光函式,8行
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);//GLUT範例的打光函式
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);//GLUT範例的打光函式
glLightfv(GL_LIGHT0, GL_POSITION, light_position);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);//GLUT範例的打光函式
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);//GLUT範例的打光函式
2018年4月9日 星期一
Week07_馬明
2018-04-09
Week07
(1)主題:3D模型
(2)轉檔,OBJ格式(v,vt,vnf)
(3)期中考題(10行OpenGL Code)
(4)小考T-R-T
(5)回家作業:骨架階層矩陣
TODO:Moodle下載3D Exploration探索/檔案總管
(1)安裝、執行
----------------------------------
TODO:下載jsyeh.org/3dcg10>>data.zip
(2)data.zip→桌面/data/一堆3D模型
=> 用 3D Exploration 開 3D模型(看)

------------------------------------
TODO:想自己讀入3D模型(EX.jsyeh.org/3dcg10的範例)
建GLUT專案week07_glm
下載jsyeh.org/3dcg10>>Source.zip
找出
(1)glm.h
(2)glm.c重新命名glm.cpp
(3)transformation.c重新命名transfarmation,cpp
上述3個程式放入桌面week07_glm資料夾
freeglut>>bin放入data/模型
lib的改libfreeglut.a複製貼上檔名改libglut32.a
-------------------------------------------
TODO:File-New-Project,GLUT
Add files放入glm.cpp,transfarmation,cpp
Setting-Compiler的勾勾清掉

main.cpp程式清空,因為另外.cpp都有main
清空後再rebuild然後build and run

--------------------------------------------------
TODO:自己打造 3D模型 程式
(1)把上節課transfarmation.cpp內容刪除
(2)main.cpp放程式
#include "glm.h"///1.外掛
GLMmodel * pmodel=NULL;//2.指標
void display()
{
glClear(.....)///3.畫模型
.
.
.
glutSwapBuffer()///畫出來
}

-----------------------------
Week07
(1)主題:3D模型
(2)轉檔,OBJ格式(v,vt,vnf)
(3)期中考題(10行OpenGL Code)
(4)小考T-R-T
(5)回家作業:骨架階層矩陣
TODO:Moodle下載3D Exploration探索/檔案總管
(1)安裝、執行
----------------------------------
TODO:下載jsyeh.org/3dcg10>>data.zip
(2)data.zip→桌面/data/一堆3D模型
=> 用 3D Exploration 開 3D模型(看)
------------------------------------
TODO:想自己讀入3D模型(EX.jsyeh.org/3dcg10的範例)
建GLUT專案week07_glm
下載jsyeh.org/3dcg10>>Source.zip
找出
(1)glm.h
(2)glm.c重新命名glm.cpp
(3)transformation.c重新命名transfarmation,cpp
上述3個程式放入桌面week07_glm資料夾
freeglut>>bin放入data/模型
lib的改libfreeglut.a複製貼上檔名改libglut32.a
-------------------------------------------
TODO:File-New-Project,GLUT
Add files放入glm.cpp,transfarmation,cpp
Setting-Compiler的勾勾清掉
main.cpp程式清空,因為另外.cpp都有main
清空後再rebuild然後build and run
--------------------------------------------------
TODO:自己打造 3D模型 程式
(1)把上節課transfarmation.cpp內容刪除
(2)main.cpp放程式
#include "glm.h"///1.外掛
GLMmodel * pmodel=NULL;//2.指標
void display()
{
glClear(.....)///3.畫模型
.
.
.
glutSwapBuffer()///畫出來
}
-----------------------------
2018年3月26日 星期一
week05_馬明
2018-03-26
Week05
(1)複習移動旋轉(Translate,Rotate)
(2)本週主題:T-R-T特定軸轉
(3)本週主題:階層性旋轉
(4)本週主題:矩陣(整合)
(5)回家作業
(1)複習
看Transformation.exe(改順序)
至jsyeh/3dcg10下載
windows.zip
Data.zip
glut32.dll
如week04打開Transformation.exe
口訣:左耳貼左肩,程式由下而上由內而外

先Rotate再Translate會公轉、反之則會自轉
(2)T-R-T
試著讓茶壺繞著中心點轉

(3)階層性旋轉
舉重

Week05
(1)複習移動旋轉(Translate,Rotate)
(2)本週主題:T-R-T特定軸轉
(3)本週主題:階層性旋轉
(4)本週主題:矩陣(整合)
(5)回家作業
(1)複習
看Transformation.exe(改順序)
至jsyeh/3dcg10下載
windows.zip
Data.zip
glut32.dll
如week04打開Transformation.exe
口訣:左耳貼左肩,程式由下而上由內而外

先Rotate再Translate會公轉、反之則會自轉
(2)T-R-T
試著讓茶壺繞著中心點轉
(3)階層性旋轉
舉重
2018年3月19日 星期一
week04_馬明
2018-03-19
Week04
主題:移動、旋轉、縮放
範例:Transformation
下載所需檔案
至jsyeh.org/3dcg10下載windows.zip、data.zip、glut32.dll

解壓縮windows.zip至資料夾,data解壓縮後和glut32.dll丟進windows
使Windows的Transformation.exe可以開啟並且不會閃退
**說明(考試重點)
g1PushMatrix();備份矩陣
glTranslatef(x,y,z);移動
glRotatef(角度,X,Y,Z);轉動(右手安培)
glScalef(x,y,z);縮放
glBegin(GL_POLYON);開始畫
glColor3f(r,g,b);顏色
glVertex3f(x,y,z);頂點
End();結束畫
glBegin();對應
glPopMatrix();還原矩陣
CodeBlocks開始專案GLUT
實作讓茶壺自己轉動

用滑鼠控制茶壺轉動

MAYA式操控

Week04
主題:移動、旋轉、縮放
範例:Transformation
下載所需檔案
至jsyeh.org/3dcg10下載windows.zip、data.zip、glut32.dll
解壓縮windows.zip至資料夾,data解壓縮後和glut32.dll丟進windows
使Windows的Transformation.exe可以開啟並且不會閃退
**說明(考試重點)
g1PushMatrix();備份矩陣
glTranslatef(x,y,z);移動
glRotatef(角度,X,Y,Z);轉動(右手安培)
glScalef(x,y,z);縮放
glBegin(GL_POLYON);開始畫
glColor3f(r,g,b);顏色
glVertex3f(x,y,z);頂點
End();結束畫
glBegin();對應
glPopMatrix();還原矩陣
CodeBlocks開始專案GLUT
實作讓茶壺自己轉動
用滑鼠控制茶壺轉動
MAYA式操控
2018年3月12日 星期一
Week03_馬明
void display()
{
glClearColor(1,1,0, 1);///背景
glClearColor(1,1,0, 1);///背景
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///兩種模式
glutSolidTeapot(0.3);
glutSwapBuffers();///教畫畫面BUFFER便會顯示
}
int main(int argc,char ** argv)///進階的main()參數(個數,字串)
{
glutInit(&argc,argv);///近接參數初始GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///開啟兩種模式
glutCreateWindow("week03 Mouse操作");///盡量不要用中文
glutDisplayFunc(display);///等一下樓上要準備void display()
///glutMouseFunc(mouse);///等一下會準備好MOUSE()功能,按鈕
///glutMotionFunc(motion);///等一下會準備好MOTION(),移動
glutMainLoop();///主要迴圈
}
-----------------------------------------------------------
2.加入mouse功能
加入printf("%d %d %d %d\n",button,state,x,y);

3.加MOTION
放大象
#include <GL/glut.h>
float teapotX=0,teapotY=0;
void display()
{
glClearColor(1,1,0, 1);///背景
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
#include<stdio.h>
void mouse (int button,int state,int x,int y)
{
if(state==GLUT_DOWN) printf("glVertex2f(%f,%f);\n",(x-150)/150.0,-(y-150)/150.0);
}///開冰箱門、把大象放到冰箱、關冰箱門
void motion(int x,int y)
{
teapotX=(x-150)/150.0;
teapotY=-(y-150)/150.0;
printf("%d %d\n",x,y);
glutPostRedisplay();
}
int main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}

-----------------------------------------------------------
2.加入mouse功能
加入printf("%d %d %d %d\n",button,state,x,y);
3.加MOTION
放大象
#include <GL/glut.h>
float teapotX=0,teapotY=0;
void display()
{
glClearColor(1,1,0, 1);///背景
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
#include<stdio.h>
void mouse (int button,int state,int x,int y)
{
if(state==GLUT_DOWN) printf("glVertex2f(%f,%f);\n",(x-150)/150.0,-(y-150)/150.0);
}///開冰箱門、把大象放到冰箱、關冰箱門
void motion(int x,int y)
{
teapotX=(x-150)/150.0;
teapotY=-(y-150)/150.0;
printf("%d %d\n",x,y);
glutPostRedisplay();
}
int main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
2018年3月5日 星期一
Week02_馬明
到jsyeh/3dcg10下載data,win32,glut32.dll

把win32解壓縮至資料夾,把glut32.dll丟進資料夾後開啟資料夾中的Shapes
在Shapes中可以右鍵選形狀,拖拉右邊綠色數字調整數值

Vertex 頂點、頂點有(x軸,y軸)
glColor(R,G,B);色彩
glVertex 2f
↑float浮點數
開啟OpenGL
擷取檔案中的
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
glEnd();
和上禮拜一樣載MOODLE的檔案
解壓縮後將lib的libfreeglut複製貼上,新檔案改為libglut32.a後開啟GLUT
將在OpenGL擷取的程式碼加入精簡化的GLUT


編譯執行得到
若將剛剛從OpenGL擷取貼上的程式碼改為glutSolidTeapot(0.3);
圖形會變成茶壺

把win32解壓縮至資料夾,把glut32.dll丟進資料夾後開啟資料夾中的Shapes
在Shapes中可以右鍵選形狀,拖拉右邊綠色數字調整數值
Vertex 頂點、頂點有(x軸,y軸)
glColor(R,G,B);色彩
glVertex 2f
↑float浮點數
開啟OpenGL
擷取檔案中的
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
glEnd();
和上禮拜一樣載MOODLE的檔案
解壓縮後將lib的libfreeglut複製貼上,新檔案改為libglut32.a後開啟GLUT
將在OpenGL擷取的程式碼加入精簡化的GLUT
編譯執行得到
若將剛剛從OpenGL擷取貼上的程式碼改為glutSolidTeapot(0.3);
圖形會變成茶壺
訂閱:
文章 (Atom)