2017電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2017年7月1日 星期六
2017年6月12日 星期一
2017年6月5日 星期一
week 16 上課筆記 黃雪婷
一. 用excel實作
(可以用excel使用內差公式)=A2*90000+(1-A2)*30000
交叉相乘 (新) (舊)
課堂作業二:
可以自主轉動
重點:
#include <stdio.h>
int oldX=0, oldY=0;
void keyboard(unsigned char key,int x,int y)
{
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;
if(key=='6') now=6;
if(key=='7') now=7;
if(key=='8') now=8;
}
void mouse(int button, int state, int x, int y)
{
oldX=x; oldY=y;
glutPostRedisplay();
}
void motion(int x, int y)
{
angle[now] +=(x-oldX);
oldX=x;
glutPostRedisplay();
}
void timer(int t)
{
glutTimerFunc(1000,timer,t+1);
interpolation();
glutPostRedisplay();
}
(可以用excel使用內差公式)=A2*90000+(1-A2)*30000
交叉相乘 (新) (舊)
課堂作業二:
可以自主轉動
重點:
#include <stdio.h>
int oldX=0, oldY=0;
void keyboard(unsigned char key,int x,int y)
{
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;
if(key=='6') now=6;
if(key=='7') now=7;
if(key=='8') now=8;
}
void mouse(int button, int state, int x, int y)
{
oldX=x; oldY=y;
glutPostRedisplay();
}
void motion(int x, int y)
{
angle[now] +=(x-oldX);
oldX=x;
glutPostRedisplay();
}
void timer(int t)
{
glutTimerFunc(1000,timer,t+1);
interpolation();
glutPostRedisplay();
}
2017年5月22日 星期一
week14 黃雪婷 上課筆記 04162416
課堂作業一:
在電腦上打開自己的回家作業
課堂作業二:
讓模型動起來
(用glPushMatrix()和glPopMatrix()把身體和手部位包裹起來,讓手可以隨著身體一起轉動)
課堂作業三:加計時器
2017年5月15日 星期一
Week13 上課筆記 黃雪婷
課堂作業一: 自己操作小考題目
第一道:
glPushMatrix();
glTranslatef(0.4,-1.0,1);
glRotate(angle, 0,0,1);
glTranslatef(0.2,-0.5,0);
drawLeg();
glPopMatrix();
第二道題目:
glPushMatrix();
glTranslatef(-0.5,0.35,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.3,0,0);
drawHand();
glPopMatrix();
小技巧:順時針是負的angle,逆時針是正的angle.
課堂作業二: 用程式碼寫出一個機器人
(第一步:安裝openCV 2.1.0 vs2008)
(第二步: 打開codeblocks,建立一個console application)
(第三步:寫出以下程式碼,可以在對話框中打開圖檔)
但是前提是要build options中添加如下東西:
第四步:
執行如下
課堂作業三:
打開cbp檔可以看見一個旋轉的地球 (地圖為貼圖上去)
第一道:
glPushMatrix();
glTranslatef(0.4,-1.0,1);
glRotate(angle, 0,0,1);
glTranslatef(0.2,-0.5,0);
drawLeg();
glPopMatrix();
第二道題目:
glPushMatrix();
glTranslatef(-0.5,0.35,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.3,0,0);
drawHand();
glPopMatrix();
小技巧:順時針是負的angle,逆時針是正的angle.
課堂作業二: 用程式碼寫出一個機器人
(第一步:安裝openCV 2.1.0 vs2008)
(第二步: 打開codeblocks,建立一個console application)
(第三步:寫出以下程式碼,可以在對話框中打開圖檔)
但是前提是要build options中添加如下東西:
第四步:
執行如下
課堂作業三:
打開cbp檔可以看見一個旋轉的地球 (地圖為貼圖上去)
2017年5月8日 星期一
week12 黃雪婷 上課筆記
課堂作業一:
去老師的網站下載DATA,windows壓縮包還有glut32.dll文件.將windows解壓縮到桌面上的windows資料夾中,把data解壓縮到windows資料夾,再把glut32.dll文件拖到windows文件夾中,如下圖所示
這樣就可以成功打開windows資料夾中的文件了.
課堂作業二: 用程式碼寫出一個茶壺
課堂作業三:修改loot at 座標,可以從不同的角度來看茶壺
(改變坐標可以從不同角度看茶壺)
課堂作業四:
通過更改center值還有up值可以改變社相機的位置從而可以從不同的角度看模型
通過改變角度angle,可以使茶壺旋轉起來並且不會破碎,改變gluPerspective的參數值可以改變的旋轉狀態
重點:
gluPerspective(60, 1, 0.001, 10000);
(
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(80, 1, 0.001, 10000);
glMatrixMode(GL_MODELVIEW);
angle+=0.01;
eyeX=cos(angle); eyeZ=sin(angle);)
將原來旋轉的茶壺的程式碼替換成老師的程式碼就可以看到茶壺機器人了
重點:
glPushMatrix();
glTranslatef(0, -0.3, 0);
glColor3f(1,1,1);
glutSolidTeapot(0.3);///body
(三個函數的參數的改變引起茶壺狀態的改變)
2017年5月1日 星期一
week11 黃雪婷 上課筆記
課堂作業一:不用寫程式碼就創造出一個3d模型的app
(在google搜索3D exploration,選擇第一個連接,打開後下載1.81版本.)
(去小葉老師網站上下載data壓縮包並解壓縮,裡面有很多3d的模型)
(安裝好3d exploration後打開它,然後去打開data資料夾)
(將模型另存為save as,保存為.cpp格式)
(匯出選項選擇sample App,點擊ok)
(桌面上出現了car.cpp,表示模型變為程式碼了)(soccerball.cpp也是同理)
(以下再做soccerball.cpp的部分)
(建立一個openGL project,把自帶的main.cpp移除,再在soccerball的資料夾中複製剛才用soccerball模型變成的程式碼soccerball.cpp.成功後在codeblocks中點擊add files,把soccerball.cpp加進去,打開程式碼.因為程序語言太老,出現了無法編譯的部分,把那兩行註解掉就好了,程序還是可以正常執行)
課堂作業二:拆解模型並匯出
(海豚這個模型中有三只海豚,但是只勾選一只海豚就只能看見一只海豚,這就是把模型拆解了,然後把這個拆開的模型導出)(請保存為wavepoint.obj的格式)
(注意在保存的時候最下面的選項要選擇"visible object only",這樣就可以只導出一只海豚)
(把這些導出的模型程式碼放到data資料夾中)
課堂作業三:把導出的拆分模型放到GLUT project中
注意黑色的部分:pmodel = glmReadOBJ("data/dolphins1.obj"); (dolphins1是拆分模型第一部分的文件名稱,不能打錯,不然無法打開檔案)
重點:
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2= NULL;
GLMmodel* pmodel3 = NULL;
(要添加新的模型)
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2 = NULL;
GLMmodel* pmodel3 = NULL;
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
angle++;
glRotatef(angle, 0,1,0);
if (!pmodel1) {
pmodel1 = glmReadOBJ("data/dolphins1.obj");
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 90.0);
}
glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
if (!pmodel2) {
pmodel2 = glmReadOBJ("data/dolphins2.obj");
if (!pmodel2) exit(0);
glmUnitize(pmodel2);
glmFacetNormals(pmodel2);
glmVertexNormals(pmodel2, 90.0);
}
glPushMatrix();
glTranslatef(1,0,0);
glScalef(0.5,0.5,0.5);
glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.4,0,0);
glScalef(1,1,1);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glutSwapBuffers();
}
(利用期中考之前學過的10個函式,來使模型縮放,移動,最終達成以下效果)
(在google搜索3D exploration,選擇第一個連接,打開後下載1.81版本.)
(去小葉老師網站上下載data壓縮包並解壓縮,裡面有很多3d的模型)
(安裝好3d exploration後打開它,然後去打開data資料夾)
(將模型另存為save as,保存為.cpp格式)
(匯出選項選擇sample App,點擊ok)
(桌面上出現了car.cpp,表示模型變為程式碼了)(soccerball.cpp也是同理)
(以下再做soccerball.cpp的部分)
(建立一個openGL project,把自帶的main.cpp移除,再在soccerball的資料夾中複製剛才用soccerball模型變成的程式碼soccerball.cpp.成功後在codeblocks中點擊add files,把soccerball.cpp加進去,打開程式碼.因為程序語言太老,出現了無法編譯的部分,把那兩行註解掉就好了,程序還是可以正常執行)
課堂作業二:拆解模型並匯出
(海豚這個模型中有三只海豚,但是只勾選一只海豚就只能看見一只海豚,這就是把模型拆解了,然後把這個拆開的模型導出)(請保存為wavepoint.obj的格式)
(注意在保存的時候最下面的選項要選擇"visible object only",這樣就可以只導出一只海豚)
課堂作業三:把導出的拆分模型放到GLUT project中
注意黑色的部分:pmodel = glmReadOBJ("data/dolphins1.obj"); (dolphins1是拆分模型第一部分的文件名稱,不能打錯,不然無法打開檔案)
重點:
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2= NULL;
GLMmodel* pmodel3 = NULL;
(要添加新的模型)
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2 = NULL;
GLMmodel* pmodel3 = NULL;
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
angle++;
glRotatef(angle, 0,1,0);
if (!pmodel1) {
pmodel1 = glmReadOBJ("data/dolphins1.obj");
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 90.0);
}
glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
if (!pmodel2) {
pmodel2 = glmReadOBJ("data/dolphins2.obj");
if (!pmodel2) exit(0);
glmUnitize(pmodel2);
glmFacetNormals(pmodel2);
glmVertexNormals(pmodel2, 90.0);
}
glPushMatrix();
glTranslatef(1,0,0);
glScalef(0.5,0.5,0.5);
glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.4,0,0);
glScalef(1,1,1);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glutSwapBuffers();
}
(利用期中考之前學過的10個函式,來使模型縮放,移動,最終達成以下效果)
訂閱:
文章 (Atom)

















































