期末作品展示:
https://youtu.be/cBNR1pYCWw0
2017電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2017年7月3日 星期一
Week 08 邊緣人上課筆記
(1)期中考模擬考
glPushMatrix();///備份矩陣
glTranslatef(x,y,z):///移動
glaRotatef(angle,x,y,z):///轉動
gl
(2)T-R-T轉動
(3)打光
(4)機器人
(5)回家作業
glPushMatrix();///備份矩陣
glTranslatef(x,y,z):///移動
glaRotatef(angle,x,y,z):///轉動
gl
(2)T-R-T轉動
(3)打光
(4)機器人
(5)回家作業
2017年6月12日 星期一
Week 17邊緣人上課筆記
(1)期末作品示範
(2)背景貼圖示範
(3)打光,貼圖切換
(4)讀檔內插示範
(5)學期總複習
(0)介紹今天的內容直播
(1)示範 myEarth.zip便背景
freeglut 裝桌面\freeglut\include\lib\bin
openCV 2.1裝C:\OpenCV2.1\include\lib\bin
把display李///畫地球
glBegin(GL_POLYGON):
glTexCoord2f(0,0);glVertex3f(-1,+1,0);
glTexCoord2f(1,0);glVertex3f(+1,+1,0);
glTexCoord2f(1,1);glVertex3f(+1,-1,0);
glTexCoord2f(0,1);glVertex3f(-1,-1,0);
glEnd;
(2)背景貼圖示範
(3)打光,貼圖切換
(4)讀檔內插示範
(5)學期總複習
(0)介紹今天的內容直播
(1)示範 myEarth.zip便背景
freeglut 裝桌面\freeglut\include\lib\bin
openCV 2.1裝C:\OpenCV2.1\include\lib\bin
把display李///畫地球
glBegin(GL_POLYGON):
glTexCoord2f(0,0);glVertex3f(-1,+1,0);
glTexCoord2f(1,0);glVertex3f(+1,+1,0);
glTexCoord2f(1,1);glVertex3f(+1,-1,0);
glTexCoord2f(0,1);glVertex3f(-1,-1,0);
glEnd;
2017年6月5日 星期一
Week 16 邊緣人上課筆記
(1)內插公式
TODO:用Excel
A1:時間 角度
A2:0.0 O~=內插公式=A2*90000+(1-A2)*30000
0.1 複製
0.2 貼上
.....
a*新+(1-a)*舊

TODO:用同學杯麵
04160391_robot解壓,裝freeglut,build
TODO:(1)內插公式&函式加入
(2)Timer函式準備好


(2)存檔、讀檔
TODO:寫檔案
#include <stdio.h>
FILE* fout=NULL;//檔案指標
;在keyboard()中
if(key=='s'||key=='S')
{ if(fout==NULL)fout=fopen("file.txt","w+");
fprintf(fout,"%3f %3f %3f %3f %3f\n",angle[o].....

(3)利用Timer自動內插
(4)鍵盤+滑鼠
int now=0;
int oldX=0, oldY=0;
#include <stdio.h>
void keyboard(unsigned char key, int x, int y)///今天簡化修改
{
printf("%c\n", key);
if(key=='0') now=0;///今天簡化修改
if(key=='1') now=1;///今天簡化修改
if(key=='2') now=2;///今天簡化修改
if(key=='3') now=3;///今天簡化修改
if(key=='4') now=4;///今天簡化修改
if(key=='5') now=5;///今天簡化修改
}
void mouse(int button, int state, int x, int y)///今天簡化修改
{
oldX=x;///今天簡化修改
oldY=y;///今天簡化修改
}
void motion(int x, int y)///今天簡化修改
{
angle[now] += x-oldX;///今天簡化修改
oldX=x;
glutPostRedisplay();///今天簡化修改
}
TODO:用Excel
A1:時間 角度
A2:0.0 O~=內插公式=A2*90000+(1-A2)*30000
0.1 複製
0.2 貼上
.....
a*新+(1-a)*舊

TODO:用同學杯麵
04160391_robot解壓,裝freeglut,build
TODO:(1)內插公式&函式加入
(2)Timer函式準備好


(2)存檔、讀檔
TODO:寫檔案
#include <stdio.h>
FILE* fout=NULL;//檔案指標
;在keyboard()中
if(key=='s'||key=='S')
{ if(fout==NULL)fout=fopen("file.txt","w+");
fprintf(fout,"%3f %3f %3f %3f %3f\n",angle[o].....

(3)利用Timer自動內插
(4)鍵盤+滑鼠
int now=0;
int oldX=0, oldY=0;
#include <stdio.h>
void keyboard(unsigned char key, int x, int y)///今天簡化修改
{
printf("%c\n", key);
if(key=='0') now=0;///今天簡化修改
if(key=='1') now=1;///今天簡化修改
if(key=='2') now=2;///今天簡化修改
if(key=='3') now=3;///今天簡化修改
if(key=='4') now=4;///今天簡化修改
if(key=='5') now=5;///今天簡化修改
}
void mouse(int button, int state, int x, int y)///今天簡化修改
{
oldX=x;///今天簡化修改
oldY=y;///今天簡化修改
}
void motion(int x, int y)///今天簡化修改
{
angle[now] += x-oldX;///今天簡化修改
oldX=x;
glutPostRedisplay();///今天簡化修改
}
2017年5月22日 星期一
Week 14邊緣人上課筆記
(1)上週回家作業
TODO:在s302把freeglut裝好
把moodle的作業下載解
開專案調設定
TODO:做出手隨身轉動
TODO:小考T-R-T觀念

* glPushMatrix();
glRotatef(angle, 0,1,0);
glPushMatrix(); ///body
glTranslatef(0,0,0);
glRotatef(180,0,1,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel[0], GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();///head
glTranslatef(0,0,0);
glRotatef(180,0,1,0);
glRotatef(10,1,0,0);
glTranslatef(0,0.65,0);
glScalef(0.7,0.7,0.7);
glmDraw(pmodel[1], GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();///將頭手身體組合在一起轉動
glPopMatrix();
TODO:謝佩04160152-rb.zip
計時器:在main()
glutDisplayFunc(display);
glutTimerFunc(0 ,timer, 0);
等多久 叫誰 參數
void timer(int t)///計時器叫的時候, 要做什麼呢?
{ glutTimerFunc(0,timer,t+1);///先撥下一個鬧鐘
angle++;
glutPostRedisplay();///提醒電腦,有空要畫一下畫面哦
}


(2)動起來
TODO:在s302把freeglut裝好
把moodle的作業下載解
開專案調設定
TODO:做出手隨身轉動
TODO:小考T-R-T觀念

* glPushMatrix();
glRotatef(angle, 0,1,0);
glPushMatrix(); ///body
glTranslatef(0,0,0);
glRotatef(180,0,1,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel[0], GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();///head
glTranslatef(0,0,0);
glRotatef(180,0,1,0);
glRotatef(10,1,0,0);
glTranslatef(0,0.65,0);
glScalef(0.7,0.7,0.7);
glmDraw(pmodel[1], GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();///將頭手身體組合在一起轉動
glPopMatrix();
TODO:謝佩04160152-rb.zip
計時器:在main()
glutDisplayFunc(display);
glutTimerFunc(0 ,timer, 0);
等多久 叫誰 參數
void timer(int t)///計時器叫的時候, 要做什麼呢?
{ glutTimerFunc(0,timer,t+1);///先撥下一個鬧鐘
angle++;
glutPostRedisplay();///提醒電腦,有空要畫一下畫面哦
}


(2)動起來
2017年5月15日 星期一
Week 13邊緣人上課筆記
(1)小考:T-R-T觀念
TODO:老師示範小考
glPushMatrix();
glTranslatef(x,y,z)(3)在把樓下的會旋轉的腿,掛在(x,y,z)
glRotatef(angle,x,y,z)(2)對Z軸做旋轉angle角度
glTranslatef(x,y,z)(1)把旋轉中心點,放在畫面中間
drawArm();畫某物件
glPopMatrix();
(2)上周範圍
(3)讀圖檔
TODO:讀圖檔,
用OpenCV 2.1
(1)安裝opencv-2.1.0-vs2008.exe

(2)確認C:\openCV2.1\include\opencv\很多.h檔
\lib\很多lib檔
\bin\很多dll檔

(3)新增貝殼專案file-New-Project,右上角console App




(4)設定貼圖
(5)轉動的地球
TODO:myEarth.zip.解壓縮
(1) freeglut到c:\users\user\Desktop\freeglut
include
lib
bin
(2)myEarth專案黨開起來
(3)F9執行image.jpg圖
freeglut.dll
要裝好OpenCV.可開圖
專案cbp
程式cpp

(6)回家最業:機器人
TODO:老師示範小考
glPushMatrix();
glTranslatef(x,y,z)(3)在把樓下的會旋轉的腿,掛在(x,y,z)
glRotatef(angle,x,y,z)(2)對Z軸做旋轉angle角度
glTranslatef(x,y,z)(1)把旋轉中心點,放在畫面中間
drawArm();畫某物件
glPopMatrix();
(2)上周範圍
(3)讀圖檔
TODO:讀圖檔,
用OpenCV 2.1
(1)安裝opencv-2.1.0-vs2008.exe

(2)確認C:\openCV2.1\include\opencv\很多.h檔
\lib\很多lib檔
\bin\很多dll檔

(3)新增貝殼專案file-New-Project,右上角console App




(4)設定貼圖
(5)轉動的地球
TODO:myEarth.zip.解壓縮
(1) freeglut到c:\users\user\Desktop\freeglut
include
lib
bin
(2)myEarth專案黨開起來
(3)F9執行image.jpg圖
freeglut.dll
要裝好OpenCV.可開圖
專案cbp
程式cpp

(6)回家最業:機器人
2017年5月8日 星期一
Week 12 邊緣人上課筆記
(1)3D TRT轉動
(2)矩陣頭影矩陣
(3)攝影機運鏡
(4)會動的機器人
TODO:jsyeh.org/3dcg10 download
data.zip->桌面\windows\data\模型.obj
windows.zip->桌面\windows\projection.exe
glut32.dll->桌面\windows\glut32.dll
TODO:
glutLookAt(eyeX,eyeY,eyeZ,
centerX,centerY,centerZ,
upX,upY,upZ);

TODO:04160011_hw1_projection.zip
改glutLookAt(......)
改eyeX
eyeY
eyeZ---->改攝影機拍攝的位置

centerX
centerY
centerZ,--->中心位置

改glutPerspective(fov ,1 ,near, far)'
視野角, xy比例
field of view(FOV)

glMatrixMode(GL_PROJECTION);--->改為透視矩陣
glLoadIdentity();---->配合上方的透視矩陣
gluPerspective(60, 1, 0.001, 10000);---->配合上方的透視矩陣
glMatrixMode(GL_MODELVIEW);--->改為原來矩陣
glPushMatrix();
///glTranslatef();掛上去
glTranslatef();定旋轉中心
glRotatef();旋轉

(2)矩陣頭影矩陣
(3)攝影機運鏡
(4)會動的機器人
TODO:jsyeh.org/3dcg10 download
data.zip->桌面\windows\data\模型.obj
windows.zip->桌面\windows\projection.exe
glut32.dll->桌面\windows\glut32.dll
TODO:
glutLookAt(eyeX,eyeY,eyeZ,
centerX,centerY,centerZ,
upX,upY,upZ);

TODO:04160011_hw1_projection.zip
改glutLookAt(......)
改eyeX
eyeY
eyeZ---->改攝影機拍攝的位置

centerX
centerY
centerZ,--->中心位置

改glutPerspective(fov ,1 ,near, far)'
視野角, xy比例
field of view(FOV)

glMatrixMode(GL_PROJECTION);--->改為透視矩陣
glLoadIdentity();---->配合上方的透視矩陣
gluPerspective(60, 1, 0.001, 10000);---->配合上方的透視矩陣
glMatrixMode(GL_MODELVIEW);--->改為原來矩陣
glPushMatrix();
///glTranslatef();掛上去
glTranslatef();定旋轉中心
glRotatef();旋轉

2017年5月1日 星期一
Week 11 邊緣人上課筆記
TODO:Google:3D Exploration(3D的檔案總管)
3D Exploration 1.81(橘色.免費試用版)
在S302安裝.
TODO:jsyeh.org/3dcg10有data.zip
有3D模型可用.

ToDO:用3D Exploration開啟data.zip模型
TODO:匯出OpenGL Sample APP

File-Save AS.選Cpp Open Gl.....在某目錄存下來(桌面)
4.勾繪匯出Export Dialog 出現框框
5.看cpp檔Notepad++看
6.codeBlocks.File-New-Project.OpenGL專案偷天換日(把main.c移除換porsche.cpp)


(1)組合出機器人
1.myGLMsample.zip
2.data.zip
3.source.zip{glm.c
glm.h
transformation.c
4.freeglut.zip
(2)做出可轉動的關節
1.匯出obj檔(要按visible objects only)

2.generate material file
save vertex nomals
compact data全勾

3.if (!pmodel1) {
pmodel1 = glmReadOBJ("data/dolphins1.obj");
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 90.0);
}

4.glPushMatrix();
glTranslatef(0.5,0,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel1,GLM_SMOOTH|GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.5,0,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();

(3)錄製動作
(4)回家作業:機器人
3D Exploration 1.81(橘色.免費試用版)
在S302安裝.
TODO:jsyeh.org/3dcg10有data.zip
有3D模型可用.

ToDO:用3D Exploration開啟data.zip模型
TODO:匯出OpenGL Sample APP

File-Save AS.選Cpp Open Gl.....在某目錄存下來(桌面)
4.勾繪匯出Export Dialog 出現框框
5.看cpp檔Notepad++看
6.codeBlocks.File-New-Project.OpenGL專案偷天換日(把main.c移除換porsche.cpp)


(1)組合出機器人
1.myGLMsample.zip
2.data.zip
3.source.zip{glm.c
glm.h
transformation.c
4.freeglut.zip
(2)做出可轉動的關節
1.匯出obj檔(要按visible objects only)

2.generate material file
save vertex nomals
compact data全勾

3.if (!pmodel1) {
pmodel1 = glmReadOBJ("data/dolphins1.obj");
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 90.0);
}

4.glPushMatrix();
glTranslatef(0.5,0,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel1,GLM_SMOOTH|GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.5,0,0);
glScalef(0.4,0.4,0.4);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();

(3)錄製動作
(4)回家作業:機器人
2017年4月24日 星期一
Week 10 邊緣人上課筆記
(1)貼圖
(2)聲音
#include <mmsystem.h>///Multimedia System(多媒體系統)
void mouse(int button,int state,int x,int y)///Add a mouse Function
{
PlaySound("C:\\Users\\user\\Desktop\\lesson32\\Lesson32/Data/shot.wav",NULL,SND_ASYNC);
}///copy this line ///要把檔名裡面的目錄裡面的斜線,從\ 變成(A)\\ OR (B)/

glutMouseFunc(mouse)///Add a mouse Function
(3)小遊戲
ToDo:玩遊戲,射擊
Google:NeHe Lesson 32
下載 Lesson最下面
Visual C++的範例
解壓縮桌面\Lesson32\lesson32.exe應用程式
ToDo:小鋼琴加入keyboard
void keyboard(unsigned char key,int x,int y)
{
if(key=='1') PlaySound("do.wav",NULL,SND_ASYNC);
if(key=='2') PlaySound("re.wav",NULL,SND_ASYNC);
if(key=='3') PlaySound("mi.wav",NULL,SND_ASYNC);
if(key=='4') PlaySound("fa.wav",NULL,SND_ASYNC);
if(key=='5') PlaySound("so.wav",NULL,SND_ASYNC);
}
glutKeyboardFunc(keyboard);
#inlcude "CMP3_MCI.h"///(1)放在同一個程式碼專案目錄中
CMP3_MCI myMP3;///宣告一個變數,叫myMP3
myMP3.Load("C:\\Users\\user\\Desktop\\2017\\music.mp3");///讀取mp3檔案
myMP3.Play();///啟動檔案
(2)聲音
#include <mmsystem.h>///Multimedia System(多媒體系統)void mouse(int button,int state,int x,int y)///Add a mouse Function
{
PlaySound("C:\\Users\\user\\Desktop\\lesson32\\Lesson32/Data/shot.wav",NULL,SND_ASYNC);
}///copy this line ///要把檔名裡面的目錄裡面的斜線,從\ 變成(A)\\ OR (B)/

glutMouseFunc(mouse)///Add a mouse Function

(3)小遊戲
ToDo:玩遊戲,射擊
Google:NeHe Lesson 32
下載 Lesson最下面
Visual C++的範例
解壓縮桌面\Lesson32\lesson32.exe應用程式
ToDo:小鋼琴加入keyboard
void keyboard(unsigned char key,int x,int y)
{
if(key=='1') PlaySound("do.wav",NULL,SND_ASYNC);
if(key=='2') PlaySound("re.wav",NULL,SND_ASYNC);
if(key=='3') PlaySound("mi.wav",NULL,SND_ASYNC);
if(key=='4') PlaySound("fa.wav",NULL,SND_ASYNC);
if(key=='5') PlaySound("so.wav",NULL,SND_ASYNC);
}
glutKeyboardFunc(keyboard);

#inlcude "CMP3_MCI.h"///(1)放在同一個程式碼專案目錄中
CMP3_MCI myMP3;///宣告一個變數,叫myMP3
myMP3.Load("C:\\Users\\user\\Desktop\\2017\\music.mp3");///讀取mp3檔案
myMP3.Play();///啟動檔案
2017年4月17日 星期一
Week 09 邊緣人上課筆記
(1)期中考試
(2)T-R-T 觀念測驗
(3)讀入3D模形
google:obj mtl youtube
可找到maya會出OBJ的方法
(4)老師的myGLMsample.zip解開
freeglut.zip->桌面\freeglut\include\lib\bin
TODO:jsyeh.org/3dcg10下載
☆source.zip(glm.h,glm.cpp)
windows.zip->桌面\windows\Transformation.exe
data.zip->桌面\windows\data\soccerball.obj
glut32.dll->桌面\windows\glut32.dll
(1)切換模型
(2)開啟soccerball.objmtl{v開頭 Vertex
Notepad++ 按右鍵 vn開頭Vertex normal
vt開頭Vertex texture coordinate
f 開頭face(臉,面)
1.首先把myGLMsample檔案

2.開啟0416001-hw1.cbp

3.重新建立程式

4. GLMmodel* pmodel = NULL;///一開始,沒有讀入模型,NULL
if (!pmodel) { ///一開始如果有指標,那要很小心,要讀入模型
pmodel = glmReadOBJ("data/porsche.obj");///檔名拼字目錄要對
if (!pmodel) exit(0);讀完還是沒有?太糟了,失敗就閃退
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}如果沒有模型讀取模型
5.glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);一直讀取模型
6.#include <GL/glut.h>
#include "glm.h"
讀取GL檔

7.匯入模型到OBJ檔到時候能會進GL(export all)

(2)T-R-T 觀念測驗
(3)讀入3D模形
google:obj mtl youtube
可找到maya會出OBJ的方法
(4)老師的myGLMsample.zip解開
freeglut.zip->桌面\freeglut\include\lib\bin
TODO:jsyeh.org/3dcg10下載
☆source.zip(glm.h,glm.cpp)
windows.zip->桌面\windows\Transformation.exe
data.zip->桌面\windows\data\soccerball.obj
glut32.dll->桌面\windows\glut32.dll
(1)切換模型
(2)開啟soccerball.objmtl{v開頭 Vertex
Notepad++ 按右鍵 vn開頭Vertex normal
vt開頭Vertex texture coordinate
f 開頭face(臉,面)
1.首先把myGLMsample檔案

2.開啟0416001-hw1.cbp

3.重新建立程式

4. GLMmodel* pmodel = NULL;///一開始,沒有讀入模型,NULL
if (!pmodel) { ///一開始如果有指標,那要很小心,要讀入模型
pmodel = glmReadOBJ("data/porsche.obj");///檔名拼字目錄要對
if (!pmodel) exit(0);讀完還是沒有?太糟了,失敗就閃退
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}如果沒有模型讀取模型
5.glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);一直讀取模型
6.#include <GL/glut.h>
#include "glm.h"
讀取GL檔

7.匯入模型到OBJ檔到時候能會進GL(export all)

2017年4月10日 星期一
Week 08 邊緣人筆記
(1)期中考模擬考
glPushMatrix();備份矩陣
glTranslatef(x,y,z);移動
glRotatef(angle,x,y,z);旋轉
glScalef(x,y,z);縮放
glBegin(GL_POLYGON);///開始畫
glColor3f(r,g,b);///顏色
glNormal3f(nx,ny,nz);///法向量
glTexCoord2f(tx,ty);///貼圖座標
glVertex3f(x,y,z);///頂點
glEnd();///結束畫
glPopMatrix();///還原矩陣
(2)T-R-T轉動
(3)打光
照著之前的步驟:
1.首先下載freeglut
2.開啟glutproject
3.更改路徑到freeglut
4.run and bluit

5.打出
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPopMatrix();
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

6.找尋light

宣告光源及打光的調整: 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_shinines
7.把light以上的程式碼都刪掉

8.run and bluit

9更改程式碼
const GLfloat light_position[] = { 2.0f, -5.0f, 0.0f, 0.0f };

10.float angle=0;
angle++;
宣告angle來跑出angle程式碼
11.旋轉程式碼:
glutIdleFunc(display);

(1) glutSolidTeapot(大小);
glutSolidCube(大小)->正方體

glutSolidCone(底r,高h,slice,stack);->角錐
柳丁切 堆疊
glutSclaef(0.5,0.5,0.5);
glutSolidDodecahedron();->烏龜殼

glutSolidIcosahedron();->8角體

(4)機器人
glPushMatrix();備份矩陣
glTranslatef(x,y,z);移動
glRotatef(angle,x,y,z);旋轉
glScalef(x,y,z);縮放
glBegin(GL_POLYGON);///開始畫
glColor3f(r,g,b);///顏色
glNormal3f(nx,ny,nz);///法向量
glTexCoord2f(tx,ty);///貼圖座標
glVertex3f(x,y,z);///頂點
glEnd();///結束畫
glPopMatrix();///還原矩陣
(2)T-R-T轉動
(3)打光
照著之前的步驟:
1.首先下載freeglut
2.開啟glutproject
3.更改路徑到freeglut
4.run and bluit

5.打出
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPopMatrix();
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();

6.找尋light

宣告光源及打光的調整: 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_shinines
7.把light以上的程式碼都刪掉

8.run and bluit

9更改程式碼
const GLfloat light_position[] = { 2.0f, -5.0f, 0.0f, 0.0f };

10.float angle=0;
angle++;
宣告angle來跑出angle程式碼
11.旋轉程式碼:
glutIdleFunc(display);

(1) glutSolidTeapot(大小);
glutSolidCube(大小)->正方體

glutSolidCone(底r,高h,slice,stack);->角錐
柳丁切 堆疊
glutSclaef(0.5,0.5,0.5);
glutSolidDodecahedron();->烏龜殼

glutSolidIcosahedron();->8角體

(4)機器人
訂閱:
文章 (Atom)
