2017電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2017年6月28日 星期三
2017年5月22日 星期一
week14 陶軒宇課堂筆記
課堂作業一
上moodle把作業的機器人下載下來
課堂作業二
計時器
課堂作業三
轉手臂
程式碼
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel1 = NULL;
GLMmodel* pmodel2 = NULL;
GLMmodel* pmodel3 = NULL;
GLMmodel* pmodel4 = NULL;
GLMmodel* pmodel5 = NULL;
GLMmodel* pmodel6 = NULL;
GLMmodel* pmodel7 = NULL;
GLMmodel* pmodel8 = NULL;
GLMmodel* pmodel9 = NULL;
GLMmodel* pmode20 = NULL;
/*此為宣告模型變數*/
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
if (!pmodel1)
{
pmodel1 = glmReadOBJ("data/rh1.obj");
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 90.0);
}
if (!pmodel2)
{
pmodel2 = glmReadOBJ("data/body.obj");
if (!pmodel2) exit(0);
glmUnitize(pmodel2);
glmFacetNormals(pmodel2);
glmVertexNormals(pmodel2, 90.0);
}
if (!pmodel3)
{
pmodel3 = glmReadOBJ("data/lh1.obj");
if (!pmodel3) exit(0);
glmUnitize(pmodel3);
glmFacetNormals(pmodel3);
glmVertexNormals(pmodel3, 90.0);
}
if (!pmodel4)
{
pmodel4 = glmReadOBJ("data/rh2.obj");
if (!pmodel4) exit(0);
glmUnitize(pmodel4);
glmFacetNormals(pmodel4);
glmVertexNormals(pmodel4, 90.0);
}
if (!pmodel5)
{
pmodel5 = glmReadOBJ("data/rh2.obj");
if (!pmodel5) exit(0);
glmUnitize(pmodel5);
glmFacetNormals(pmodel5);
glmVertexNormals(pmodel5, 90.0);
}
if (!pmodel6)
{
pmodel6 = glmReadOBJ("data/head.obj");
if (!pmodel6) exit(0);
glmUnitize(pmodel6);
glmFacetNormals(pmodel6);
glmVertexNormals(pmodel6, 90.0);
}
if (!pmodel7)
{
pmodel7 = glmReadOBJ("data/rl1.obj");
if (!pmodel7) exit(0);
glmUnitize(pmodel7);
glmFacetNormals(pmodel7);
glmVertexNormals(pmodel7, 90.0);
}
if (!pmodel8)
{
pmodel8 = glmReadOBJ("data/ll1.obj");
if (!pmodel8) exit(0);
glmUnitize(pmodel8);
glmFacetNormals(pmodel8);
glmVertexNormals(pmodel8, 90.0);
}
if (!pmodel9)
{
pmodel9 = glmReadOBJ("data/rl2.obj");
if (!pmodel9) exit(0);
glmUnitize(pmodel9);
glmFacetNormals(pmodel9);
glmVertexNormals(pmodel9, 90.0);
}
if (!pmode20)
{
pmode20 = glmReadOBJ("data/ll2.obj");
if (!pmode20) exit(0);
glmUnitize(pmode20);
glmFacetNormals(pmode20);
glmVertexNormals(pmode20, 90.0);
}
/*此為匯入模型檔的動作,medel變數可做修改*/
glPushMatrix();
glTranslatef(0.21, 0.3, 0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.21, -0.3, 0);
glTranslatef(-0.3,0.1,0);
glScalef(0.2,0.2,0.2);
glRotatef(240,0,0,1);
glmDraw(pmodel1, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0);
glScalef(0.4,0.4,0.4);
glRotatef(90,0,0,1);
glRotatef(180,0,1,0);
glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.21, 0.3, 0);
glRotatef(angle, 0,0,1);
glTranslatef(-0.21, -0.3, 0);
glTranslatef(0.3,0.2,0);
glScalef(0.2,0.2,0.2);
glRotatef(-40,0,0,1);
glmDraw(pmodel3, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.21, 0.3, 0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.21, -0.37, 0);
glTranslatef(-0.7,0.1,0);
glScalef(0.25,0.25,0.25);
glRotatef(225,0,0,1);
glmDraw(pmodel4, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.21, 0.3, 0);
glRotatef(angle, 0,0,1);
glTranslatef(-0.21, -0.3, 0);
glTranslatef(0.7,0.1,0);
glScalef(0.25,0.25,0.25);
glRotatef(225,0,0,1);
glmDraw(pmodel5, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.7,0);
glScalef(0.4,0.4,0.4);
glRotatef(0,0,0,1);
glRotatef(180,0,1,0);
glmDraw(pmodel6, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.25,-0.5,0);
glScalef(0.25,0.25,0.25);
glRotatef(0,0,0,1);
glmDraw(pmodel7, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.25,-0.5,0);
glScalef(0.25,0.25,0.25);
glRotatef(0,0,0,1);
glmDraw(pmodel8, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(0.25,-0.7,0);
glScalef(0.25,0.25,0.25);
glRotatef(0,0,0,1);
glmDraw(pmodel9, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.25,-0.7,0);
glScalef(0.25,0.25,0.25);
glRotatef(0,0,0,1);
glmDraw(pmode20, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
/*此為對匯入模型檔作變形並顯示在視窗介面的動作*/
glPopMatrix();
glutSwapBuffers();
}
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 };
#include <stdio.h>
void timer(int t)
{
glutTimerFunc(100, timer, t+1);
angle++;
printf("哈哈哈哈哈哈哈 ");
glutPostRedisplay();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutCreateWindow("多 拉k 夢");
glutDisplayFunc(display);
glutIdleFunc(display);
glutTimerFunc(0, timer, 0);
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();
}
2017年5月15日 星期一
week 13 陶軒宇課堂筆記
課堂作業一:
T-R-T觀念小考
glPushMatrix();
glTranslatef(x,y,z);///移動到正確位置
glRotatef(angle,x,y,z);///移到中心點後開始對旋轉軸做旋轉
glTranslatef(x,y,z);///讓手臂負方向移動到中心點
drawArm();
glPopMatrix();
課堂作業二:
下載opencv注意紅框選項
開啟專案
修改下列選項
成功開啟圖檔
課堂作業三
做地球
新增glut
貼上程式碼
2017年5月8日 星期一
2017年5月1日 星期一
week11 陶軒宇 課堂作業
課堂作業一
google搜尋:3D exploration 1.81進入下圖網頁下載
去 jsyeh.org/3dcg10 下載[data]有3d模型可用並用3d exploration開啟
之後另存cpp檔,操作如下圖
接著去codeblock開啟
先去codeblocks開啟opengl檔案
remove main.cpp
將soccer.cpp替代
執行程式跑出變大變小的足球
課堂作業2
分割做出兩隻海豚
2017年4月24日 星期一
week10 陶軒宇 課堂筆記
課堂作業01
玩有聲音的射擊遊戲
1,google NeHe Lesson 32
2.點第二個圖,下載最下面的:Visual C++
3.解壓縮到桌面開lesson30.exe玩遊戲
2017年4月17日 星期一
week07 陶軒宇 課堂作業
作業一:
到jsyeh.org/3dcg10下載
1.source.zip
2.windows.zip
3.data.zip
4.glut32.dll
(1)開啟soccerball.obj.mtl
(2)右鍵 notepad++
作業二:
製作,匯出3d obj檔
(1)google: obj mtl youtube可找到maya匯出obj的方法
開啟maya隨便做個圖形
File-Export All
檔案類型選擇OBJexport
作業三:
開啟老師的保時捷範例
2017年4月10日 星期一
week06 陶軒宇 課堂筆記
作業一
複習期中考和測驗
作業二:
畫出茶壺做打光測驗:
1.開啟glut專案
2.刪除不必要程式碼並畫出茶壺
3.更改打光數值可畫出不同茶壺
作業三
1.做出兩個茶壺,一個會轉,一個不會
作業四
試著做不同圖形
1.方形
glutSolidCube(大小):
2.筒狀
glutSolidCone(底r,高h,slice柳丁切,stack堆疊);
3.圓
glutSolidSphere(r,slice,stack);
訂閱:
文章 (Atom)






















































