2021年5月3日 星期一

Week_11 2021.05.03

 1. 3D模型

    1. 準備檔案(libglut32.a)

    2. source.zip 解壓縮 找到 glm.h 放進專案資料夾

    3. glm.c 改成 glm.cpp 放進專案資料夾

    4. 開啟 transformation.c 複製內容到 main.cpp

    5. 在CodeBlocks 左側選單 按滑鼠右鍵 Add file 把 glm.cpp 加入

    6. 小黑視窗會顯示就是對的!!

        



    7. 把data解壓縮到(C:\Users\Administrator\Desktop\freeglut\bin\data) 

    8. 看到 porsche.obj 就是對的

        

2. 寫自己的glm程式

    1. 使用glm外掛

    2. 輸入程式碼

#include "glm.h"    ///使用glm.cpp外掛
GLMmodel* pmodel = NULL;   ///pmodel指標
 
void drawmodel(void)   ///使用範例程式 讀入OBJ,調大小
{   
    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);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    drawmodel();   ///使用範例程式
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
    glutCreateWindow("Week11_2");

    glutDisplayFunc(display);
    glutMainLoop();
}

   3. 為程式打光

#include "glm.h"    ///使用glm.cpp外掛
GLMmodel* pmodel = NULL;   ///pmodel指標
 
void drawmodel(void)   ///使用範例程式
{
    if (!pmodel) {
        pmodel = glmReadOBJ("data/al.obj");
        if (!pmodel) exit(0);
        glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glPushMatrix();   ///旋轉
        glRotatef(180,0,1,0);
        drawmodel();   ///使用範例程式
    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};   ///y軸負數會變成鬼片效果

    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_RGB | GLUT_DEPTH | GLUT_DOUBLE);
    glutCreateWindow("Week11_2");
    ///打光設定
    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);


    glutDisplayFunc(display);
    glutMainLoop();
}

        

3. 用自己的模型

    1. 從MAYA匯出模型 參考(https://www.youtube.com/watch?v=D4a7cNFF9kQ

    2. 設定Open CV!!

    3. 開啟cbp檔



 

 




沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...