電腦圖學 2016-05-09
(1)Blog內容複習
教學網址
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載 source data win32 glut32.dll
(2)GLUT基礎原件
(3)Maya匯出OBJ檔並將OBJ檔Load\Draw
(4)回家作業
#include <GL/glut.h>///3D glut
#include<opencv/highgui.h>///for cvLoadImage()
#include <opencv/cv.h> ///for cvCvtColor()
#include "glm.h"
#include <mmsystem.h>
#include <stdio.h>
#include "CMP3_MCI.h"
CMP3_MCI myMP3;
GLMmodel* pmodel = NULL;
using namespace std;
///void Keyboard(unsigned char , int x, int y); //獲取鍵盤輸入
float rotX=0,rotY=0;
GLUquadric * quad;
///private int[] qua = new int[] {(1,1,0),(-1,1,0),(1,-1,0),(-1,-1,0)};
void display()
{
glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(rotY, 1,0,0); ///Y的移動量 , 讓他對X軸轉
glRotatef(rotX, 0,1,0); ///X的移動量 , 讓他對Y軸轉
if (!pmodel)
{
pmodel = glmReadOBJ("myOBJ.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
glPushMatrix();
///gluSphere(quad, 0.5,30,30);
glPopMatrix();
glutSwapBuffers();
}
GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };///光照的位置
void motion(int x,int y)
{
rotX=x; rotY=y;
display();
}
/*void myInit()
{
///quad = gluNewQuadric();
IplImage * img=cvLoadImage("game.jpg");///前面是圖片網址,後面是圖片名稱,記得要兩條
///cvNamedWindow("2D");
///cvShowImage("2D", img);
///cvWaitKey(1);
///cvCvtColor(img,img, CV_BGR2RGB);
///bind
glEnable(GL_TEXTURE_2D);
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);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(500,50); ///放大和位置
glutCreateWindow("GLM model is great!");
glutMotionFunc(motion);///有關滑鼠控制
glLightfv(GL_LIGHT0, GL_POSITION, pos);///打光
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);///深度測試
myMP3.Load("Mario.mp3");
myMP3.Play();
glutDisplayFunc(display);///顯示
glutIdleFunc(display);
/// myInit();///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
glutMainLoop();
}


沒有留言:
張貼留言