#include<GL/glut.h>
#include"CMP3_MCI.h"
CPM3_MCI MyMp3;
float eyeX=-100,eyeY=80, eyeZ=-200;
void display()
{
GLfloat pos[]={0,0,200,0};
glLightfv(GL_LIGHT0,GL_POSITION,pos);
glEnable(GL_LIGHT0);
glEnable(GL_NOROMALIZE);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BIT);
glPushMatrix();
glutLookAt(eyeX,eyeY,eyeZ,0,0,0,0,1,0);
glPushMatrix();
glutSolidTeapot(100);
glPopMatrix();
glFlsuh();
}
void motion(int x, tin y)
{
eyeX=x-400;eyeY=300-y;
glutPostRedisplay();
}
void reshape(int w , int h)
{
glViewPort(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-w/2,w/2,-h/2,h/2,-1000,1000);
glMatrixMode(GL_MODELVIEN);
glLoadIdentity();
}
viod timer(int t)
{
glutTimerFunc(20,timer,t+1);
eyeX+=2;
if(eyeX>300)eyeY+=4;
glutPostRedisplay();
}
void keyboard(unsigned char key, int x,int y)
{
MyMP3.Play();
}
int main(int argc,char ** argv)
{
glutInit(&argc, argv)
glutInitWindowSize(800,600);
glutCreateWINDOW("3D");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMotionFunc(motion);
glutTimerFunc(0,timer,0);
glutKeyboardFunc(keyboard);
MyMP3.Load("music.mp3");
glutMainLoop();
}
2015 電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2015年5月20日 星期三
2015年5月13日 星期三
week11
模型
#include "glm.h"
GLMmodel * pmodel = NULL;
void display()
{
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
glFlush();
}
int main(int argc, char**argv)
{
pmodel = glmReadOBJ("porsche.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
glutInit(&argc, argv);
glutCreateWindow("GLUT");
glutDisplayFunc(display);
glutMainLoop();
}
上色
#include "glm.h"
GLMmodel * pmodel = NULL;
void display()
{
GLfloat pos[] = {0.0,0.0,-1.0,0.0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
glFlush();
}
int main(int argc, char**argv)
{
pmodel = glmReadOBJ("porsche.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
glutInit(&argc, argv);
glutCreateWindow("GLUT");
glutDisplayFunc(display);
glutMainLoop();
}
2015年5月6日 星期三
week11
#include <opencv/highgui.h> ///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()#include <GL/glut.h> ///3D glut
float angle=0; ///自動轉很帥
void display()
{ glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///自動轉很帥
glRotatef(angle, 0,1,0);///自動轉很帥
glutSolidTeapot(0.3);
glPopMatrix();///自動轉很帥
glFlush();
angle+=0.1;///自動轉很帥
}
void myInit()
{ IplImage * img = cvLoadImage("image.jpg"); ///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);
} ///最後一行最難/最重要, 所有貼圖影像的資料都設定好
int main(int argc, char**argv)
{ glutInit(&argc, argv);
glutCreateWindow("3D");
glutDisplayFunc(display); ///顯示
glutIdleFunc(display);///自動轉很帥 (閒閒沒事幹, 就重畫)
myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
glutMainLoop();
}
2015年4月29日 星期三
茶壺
1.OpenCV 2.1 設定讀圖
2.OpenGL 的專案設定
3.設定貼圖
#include <opencv/highgui.h>
#include <GL/glut.h>
#include <opencv/cv.h>
float angle=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glutSolidTeapot(0.8);
glPopMatrix();
glFlush();
angle+=0.1;
}
void myInit()
{ IplImage * img = cvLoadImage("image.jpg"); ///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);
} ///最後一行最難/最重要, 所有貼圖影像的資料都設定好
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutCreateWindow("3D");
glutDisplayFunc(display);
glutIdleFunc(display);
myInit();
glutMainLoop();
}
2015年4月15日 星期三
week08
#include<stdio.h>
#include<GL/glut.h>
#include<mmsystem.h>
float potX=-1,potY=0;
void display()
{
glClearColor(0.5,0.5,1,0);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(potX,potY,0);
glutSolidTeapot(0.05);
glPopMatrix();
glFlush();
potX+=0.001;
if(potX>1.1)potX=-1.1;
}
void keyboard(unsigned char key,int x,int y)
{
exit(0);
}
void mouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN)
{
PlaySound("Data/Shot.wav",NULL,SND_ASYNC);
printf("Shot!!!\n");
float mouseX=2*x/1280.0 -1,mouseY=-(2*y/1024.0-1);
if(abs(mouseX-potX)<0.001&&abs(mouseY-potY)<0.001){
printf("YA! Got it!\n");
PlaySound("Data/elephant.wav",NULL,SND_ASYNC);
}
}
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutCreateWindow("hello");
glutFullScreen();
glutDisplayFunc(display);
glutIdleFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
}
2015年4月8日 星期三
WEEK07
#include<GL/glut.h>
#include<mmsystem.h> //加聲音的開頭檔
#include<stdio.h>
void display()
{
glutSolidTeapot(0.3);
glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a'){printf("AAA\n");}
else if(key=='b'){printf("BBB\n");}
}
void mouse(int button, int state, int x, int y)
{
printf("now play sound\n");
PlaySound("madmoo.wav",NULL,SND_ASYNC);
}
int main(int arge, char ** argv)
{
glutInit(&arge, argv);
glutCreateWindow("hello");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
}
#include<mmsystem.h> //加聲音的開頭檔
#include<stdio.h>
void display()
{
glutSolidTeapot(0.3);
glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a'){printf("AAA\n");}
else if(key=='b'){printf("BBB\n");}
}
void mouse(int button, int state, int x, int y)
{
printf("now play sound\n");
PlaySound("madmoo.wav",NULL,SND_ASYNC);
}
int main(int arge, char ** argv)
{
glutInit(&arge, argv);
glutCreateWindow("hello");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
}
2015年3月27日 星期五
2D正方形
\
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glBegin(GL_POLYGON);
glColor3f(1,0,0);
glVertex3f(0.1,0.1,0.8);
glVertex3f(-0.1,0.1,0.8);
glVertex3f(-0.1,-0.1,0.8);
glVertex3f(0.1,-0.1,0.8);
glEnd();
glPopMatrix();
angle+=0.01;
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3D正方形
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef( angle,0,1,0.5);
glBegin(GL_POLYGON);
glColor3f(1,0,0);
glVertex3f(0.1,0.1,0.8);
glVertex3f(-0.1,0.1,0.8);
glVertex3f(-0.1,-0.1,0.8);
glVertex3f(0.1,-0.1,0.8);
glEnd();
glBegin(GL_POLYGON);
glColor3f(1,1,0);
glVertex3f(0.1,0.1,-0.8);
glVertex3f(-0.1,0.1,-0.8);
glVertex3f(-0.1,-0.1,-0.8);
glVertex3f(0.1,-0.1,-0.8);
glEnd();
glBegin(GL_QUAD_STRIP);
glColor3f(1,1,2);
glVertex3f(0.1,0.1,0.8);
glVertex3f(0.1,0.1,-0.8);
glVertex3f(-0.1,0.1,0.8);
glVertex3f(-0.1,0.1,-0.8);
glVertex3f(-0.1,-0.1,0.8);
glVertex3f(-0.1,-0.1,-0.8);
glVertex3f(0.1,-0.1,0.8);
glVertex3f(0.1,-0.1,-0.8);
glEnd();
glPopMatrix();
angle +=0.01;
glFlush();
}
int oldX=0; //宣告座標
void motion(int x,int y)
{
angle +=(x-oldX); //利用新座標去舊的得新的角度
oldX=x;
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutCreateWindow("02161025flight");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMotionFunc(motion); //移動函示
glutMainLoop();
}
2015年3月18日 星期三
week04
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslated(0.2,0,0);
glRotatef(angle, 0,1,0);
glutWireTorus(0.3,0.5,30,30);
glutSolidTeapot(0.12);
glPopMatrix();
glFlush();
angle+=0.1;
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutCreateWindow("02160740 cash");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
訂閱:
文章 (Atom)















