2017電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2017年6月30日 星期五
2017年6月13日 星期二
#week17- tp6vü[電腦圖學上課筆記]
[1]
程式碼:
void display()
{
glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); glVertex3f(-1,+1,0);///前面是貼圖座標,後面是3D頂點
glTexCoord2f(1,0); glVertex3f(+1,+1,0);
glTexCoord2f(1,1); glVertex3f(+1,-1,0);
glTexCoord2f(0,1); glVertex3f(-1,-1,0);
glEnd();
glPopMatrix();
glFlush();
}
另外必須先下載OpenCV 2.1 並安裝到桌面
還需要cv210 / cxcore210 / highgui210 這三個檔案
void myInit()
{
quad = gluNewQuadric();
id = myTexture("images.jpg");///id為貼圖,這樣就可以讀到貼圖的路徑
}
[2]
int myTexture(char *filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
這也是有關貼圖的程式碼
程式碼:
void display()
{
glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); glVertex3f(-1,+1,0);///前面是貼圖座標,後面是3D頂點
glTexCoord2f(1,0); glVertex3f(+1,+1,0);
glTexCoord2f(1,1); glVertex3f(+1,-1,0);
glTexCoord2f(0,1); glVertex3f(-1,-1,0);
glEnd();
glPopMatrix();
glFlush();
}
另外必須先下載OpenCV 2.1 並安裝到桌面
還需要cv210 / cxcore210 / highgui210 這三個檔案
void myInit()
{
quad = gluNewQuadric();
id = myTexture("images.jpg");///id為貼圖,這樣就可以讀到貼圖的路徑
}
[2]
int myTexture(char *filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
這也是有關貼圖的程式碼
#week16- tp6vü[電腦圖學上課筆記]
[1]程式碼:
fprintf(fout,"%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n\n",
{
if(key=='s')///儲存的意思
{
fout = fopen("file.txt","a");///打開記事本
fprintf(fout,"%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n\n",
angle[0],angle[1],angle[2],angle[3],angle[4],angle[5],angle[6],angle[7],angle[8],angle[9]);///這行才是寫角度進去
printf("%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n\n",
angle[0],angle[1],angle[2],angle[3],angle[4],angle[5],angle[6],angle[7],angle[8],angle[9]);///看你有多少個模型需要動
}
if(key=='r')///讀檔的意思
{
if(fin==NULL)
{
fin = fopen("file.txt","r");///寫入所需要的角度安排
}
fscanf(fin,"%f %f %f %f %f %f %f %f %f %f\n",
&Newangle[0],&Newangle[1],&Newangle[2],&Newangle[3],&Newangle[4],&Newangle[5],&Newangle[6],&Newangle[7],&Newangle[8],&Newangle[9]);
glutPostRedisplay();
}
if(key=='m')
{
glutTimerFunc(0,timer,0);
}
2017年6月4日 星期日
#week13- tp6vü[電腦圖學上課筆記]
[1]
glPushMatrix();
glTranslatef( X軸, Y.軸,0);
glRotatef(angle, 0,0,1);
glTranslatef( 將正副相反的x軸與y 軸, 0);
指定的轉動部分名字();
glPopMatrix();
glTranslatef( X軸, Y.軸,0);
glRotatef(angle, 0,0,1);
glTranslatef( 將正副相反的x軸與y 軸, 0);
指定的轉動部分名字();
glPopMatrix();
#week12- tp6vü[電腦圖學上課筆記]
[1]下載 win32、data、glut32,並開啟GLUT Project
TRT:
glTranslatef( )掛上去
glRotatef( )旋轉
glTranslatef( )固定轉動的軸心
glutLookAt(eyeX,eyeY,eyeZ) ///是攝影機
glTranslatef( )掛上去
glRotatef( )旋轉
glTranslatef( )固定轉動的軸心
2017年5月1日 星期一
#week11- tp6vü[電腦圖學上課筆記]
[1]先到GOOGLE查詢:3d exploration
接著點及第一個網站,並下載
解壓縮之後,並開啟旁邊user的data資料夾
點選soccerball,就會出現足球的動畫
並在file中save as的檔案格式改成cpp,接著按下存檔
然後選擇sampleAPP
然後將原本的程式main移除
將足球程式碼放入OpenGL資料夾內
並在project中加入此程式碼
然後開啟
但必須先將此行程式碼刪掉,由於程式碼太舊,所以會造成無法執行
接著點及第一個網站,並下載
解壓縮之後,並開啟旁邊user的data資料夾
點選soccerball,就會出現足球的動畫
並在file中save as的檔案格式改成cpp,接著按下存檔
然後選擇sampleAPP
[2]先找到剛剛足球動畫的程式碼
然後將原本的程式main移除
將足球程式碼放入OpenGL資料夾內
並在project中加入此程式碼
然後開啟
[3]將程式碼執行
但必須先將此行程式碼刪掉,由於程式碼太舊,所以會造成無法執行
2017年4月24日 星期一
#week10- tp6vü[電腦圖學上課筆記]
[1]先去google搜尋:NeHe Lesson 32
然後下載 Lesson 32最下面的 Visual C++的範例
並解壓縮,然後開啟 Lesson 32.exe的應用程式
最後就截最高分的圖
[2]先開啟一個新的GLUTproject,然後將Lesson 32的程式碼打開
加入一些程式碼,使得執行時可以發出聲音
PlaySound()是可以使執行檔發出聲音的函式
然後在函式中宣告按1/2/3/4/5,可以發出不同的wav音檔
然後下載 Lesson 32最下面的 Visual C++的範例
並解壓縮,然後開啟 Lesson 32.exe的應用程式
最後就截最高分的圖
[2]先開啟一個新的GLUTproject,然後將Lesson 32的程式碼打開
加入一些程式碼,使得執行時可以發出聲音
PlaySound()是可以使執行檔發出聲音的函式
[3]先去網站找可以下載的簡單wav檔,並下載
然後在函式中宣告按1/2/3/4/5,可以發出不同的wav音檔
[4]在函式中加入一個mp3檔,使得程式執行時,可以直接播放
把下載下來的CMP3_MCI.h檔案放近正在執行的專案資料夾中
2017年4月17日 星期一
#week09- tp6vü[電腦圖學上課筆記]
[1]複習期中考試
這是執行後的畫面
[2]程式碼:
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel = NULL;
GLMmodel* pmodelHead = NULL;
GLMmodel* pmodelLeftHand = NULL;
GLMmodel* pmodelRightHand = NULL;
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
angle++;
glRotatef(angle, 0,1,0);
if (!pmodel) {
pmodel = glmReadOBJ("data/porsche.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
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 };
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutCreateWindow("Yes, 3D Model Here");
glutDisplayFunc(display);
glutIdleFunc(display);
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年4月10日 星期一
#week08- tp6vü[電腦圖學上課筆記]
[1]老師帶我們複習期中考的範圍
[2]
程式碼:
#include <GL/glut.h>
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
///glTranslated(x,y,z);
///glRotated(angle,x,y,z);
glutSolidTeapot(0.3);
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, -2.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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
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;
}
結果是可以得到從不同方向打光的茶壺
[3]
程式碼:
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated(0,0.6,0);
glRotated(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glutSolidTeapot(0.3);
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, -2.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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutIdleFunc(display);///可以使一個茶壺轉動
glutDisplayFunc(display);
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;
}
程式碼:
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated(0,0.6,0);
glRotated(angle,0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glutSolidTeapot(0.3);
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, -2.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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutIdleFunc(display);///可以使一個茶壺轉動
glutDisplayFunc(display);
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;
}
此程式可以製造出一個轉動的茶壺以及一個不會動的茶壺
[4]
程式碼:
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);
glPushMatrix();
glTranslated(0,0.6,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glRotatef(angle,0,1,0);
///glutSolidTeapot(0.3);
glutWireSphere(0.4,15,5);
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, -2.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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutIdleFunc(display);
glutDisplayFunc(display);
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;
}
程式碼:
#include <GL/glut.h>
float angle=0;
static void display(void)
{
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);
glPushMatrix();
glTranslated(0,0.6,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glRotatef(angle,0,1,0);
///glutSolidTeapot(0.3);
glutWireSphere(0.4,15,5);
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, -2.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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutIdleFunc(display);
glutDisplayFunc(display);
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;
}
[5]
angle++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,0,0);
glPushMatrix();
glTranslated(0,0.6,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glRotatef(angle,0,1,0);
///glutSolidTeapot(0.3);
///glutWireSphere(0.4,15,5);
glutSolidIcosahedron();---加上這句
glPopMatrix();
glutSwapBuffers();
[6]程式碼
glutSolidCone(0.5,0.2,50,50);
///Cone可以改成其他的
可以是Cube之類的
2017年3月27日 星期一
#week05- tp6vü[電腦圖學上課筆記]
[1]老師講解考試範圍
[2]先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載data / windows/ glut32.dll
然後將data和glut32.dll 都放進windows的解壓縮資料夾中
[2]先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載data / windows/ glut32.dll
然後將data和glut32.dll 都放進windows的解壓縮資料夾中
[3]老師播一些機器手臂和人進行比賽的影片,讓我們知道機器手臂操作的
2017年3月20日 星期一
#week04- tp6vü[電腦圖學上課筆記]
[1]先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載data / windows/ glut32.dll
然後將data和glut32.dll 都放進windows的解壓縮資料夾中
然後將data和glut32.dll 都放進windows的解壓縮資料夾中
[2]先測試transformation
[3]再來開啟main,cpp程式
然後改成
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.6, 0, 0);///第1個數值可以改變茶壺的X值
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162495 Translate Rotate Scale");
glutDisplayFunc(display);
///glutMouseFunc(mouse);
///glutMotionFunc(motion);
glutMainLoop();
}
[4]將程式改成
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(mouseX, mouseY, 0);///第1個數值可以改變茶壺的X值
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
mouseX = x/300.0;
mouseY = y/300.0;
glutPostRedisplay();
}
int main(int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162495 Translate Rotate Scale");
glutDisplayFunc(display);
///glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
可以使茶壺跟著滑鼠一起動
[5]複習上禮拜的小精靈
[6]將程式碼改成
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(mouseX, mouseY, 0);///第1個數值可以改變茶壺的X值
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
mouseX = (x-150)/150.0;
mouseY = -(y-150)/150.0;
glutPostRedisplay();
}
int main(int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162495 Translate Rotate Scale");
glutDisplayFunc(display);
///glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(mouseX, mouseY, 0);///第1個數值可以改變茶壺的X值
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
mouseX = (x-150)/150.0;
mouseY = -(y-150)/150.0;
glutPostRedisplay();
}
int main(int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162495 Translate Rotate Scale");
glutDisplayFunc(display);
///glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
可以讓茶壺隨著滑鼠放大縮小
訂閱:
文章 (Atom)















































