2023年4月19日 星期三

deverra//week10 3D模型

WEEK10
----------------------------------------------------------------------------------------------------------------------

打開老師的範例了解3D模型的概念---->  https://jsyeh.org/3dcg10/

下載windows data檔案,打開3D模型的程式碼進行解讀

了解到---->

                    mtl 對應 material( 材質 )    

                    vn  對應 vertex normal( 點頂點打光的法向量 )

                    f    對應  點線面的( )

----------------------------------------------------------------------------------------------------------------------

▧第一個程式專案

從老師的範例中下載source檔案

            -->把glm.hglm.c 放進week10的專案裡
            -->把glm.c 改成 glm.cpp
            -->把data中的模型檔全部複製到build log最後一行的地址裡

//先在projects中week10右鍵加入 add files把glm.cpp加入至專案中

#include<GL/glut.h>
#include"glm.h"
GLMmodel * pmodel =NULL;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    if( pmodel == NULL )
    {
        pmodel = glmReadOBJ( "Al.obj" );
        glmUnitize( pmodel );
        glmFacetNormals( pmodel );
        glmVertexNormals( pmodel, 90 );
    }
    glmDraw( pmodel, GLM_MATERIAL);
    glutSwapBuffers();
}

int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09 texture");
    glutDisplayFunc(display);
    glutMainLoop();
}



----------------------------------------------------------------------------------------------------------------------
▧第二個程式專案

從老師的範例中下載source檔案

        -->把glm.h 和glm.c 放進week10的專案裡
        -->把glm.c 改成 glm.cpp
        -->把data中的模型檔全部複製到build log最後一行的地址裡

Gundam.objGundam.mtlDiffuse,jpg加到工作執行目錄
在projects中week10右鍵加入 add files把glm.cpp加入至專案中

利用第七週的貼圖程式碼
把老師的貼圖程式碼複製到code::blocks中

▦OpenCV的設定
        CodeBlocks中>>setting >> Complier
        在search directories中
        Complier中加入>>>  C:\OpenCV2.1\include
        Linker中加入>>>>  C:\OpenCV2.1\lib
        在Linker setting中加入 cv210  cxcore210  highgui210

#include<GL/glut.h>
#include"glm.h"
GLMmodel * pmodel =NULL;
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename);
    cvCvtColor(img,img, CV_BGR2RGB);
    glEnable(GL_TEXTURE_2D);
    GLuint id;
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    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()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    if( pmodel == NULL )
    {
        pmodel = glmReadOBJ( "Gundam.obj" );
        glmUnitize( pmodel );
        glmFacetNormals( pmodel );
        glmVertexNormals( pmodel, 90 );
    }
    glmDraw( pmodel, GLM_MATERIAL | GLM_TEXTURE);
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10");
    myTexture("Diffuse.jpg");
    glutDisplayFunc(display);
    glutMainLoop();
}










沒有留言:

張貼留言