2016年5月9日 星期一

不吃早餐是件很嘻哈的事

電腦圖學    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();
}

沒有留言:

張貼留言