2021年5月19日 星期三

week 13 熊貓大人到此一遊


0.1. freeglut 有裝成功
0.2. OpenCV 有裝正確, 設定
C:\OpenCV2.1\include 
C:\OpenCV2.1\lib
cv210 cxcore210 highgui210

1. 先讓貼圖成功
1.1. hackmd.io/@jsyeh/opengl 有 貼圖範例程式
1.2. Fiile-New-Project, GLUT專案 (把main.cpp內容備份)
1.3. 把貼圖範例程式 放入 main.cpp (把 puipui.jpg 改成 Diffuse.jpg)
1.4. 把圖檔放好 桌面/freeglut/bin  有 Diffuse.jpg bg.jpg (Teams裡)

圖片放到正確的目錄














貼圖程式碼:

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

GLuint id1, id2; ///TODO:增加2個 貼圖ID

int myTexture(char * filename)

{

    IplImage * img = cvLoadImage(filename); ///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);

    return id;

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glBindTexture(GL_TEXTURE_2D, id1);

    glutSolidTeapot(0.3);


    glBindTexture(GL_TEXTURE_2D, id2);

    glBegin(GL_POLYGON);

        glTexCoord2f( 0, 0 ); glVertex2f( -1, -1 );

        glTexCoord2f( 0, 1 ); glVertex2f( -1, +1 );

        glTexCoord2f( 1, 1 ); glVertex2f( +1, +1 );

        glTexCoord2f( 1, 0 ); glVertex2f( +1, -1 );

    glEnd();

    glutSwapBuffers();

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow(" Week08 ");

    glutDisplayFunc(display);


    id1 = myTexture("Diffuse.jpg");

    id2 = myTexture("bg.jpg");

    glEnable(GL_DEPTH_TEST);

    glutMainLoop();

}




成功

2. 讓目錄正確 (因桌面/freeglut/bin 太怪了。要改到 專案目錄13)

2.1. 把 freeglut\bin 的 freeglut.dll copy到專案目錄 13

把 Diffuse.jpg 及 bg.jpg 移到專案目錄 13

2.2. 用 Notepad++ (快裝) 把 13\13.cbp 專案檔打開

兩個working_dir 要改成 "."  再存檔

2.3. CodeBlocks會出現 Reload畫面, 設好它























把 freeglut\bin 的 freeglut.dll copy到專案目錄 13
       把 Diffuse.jpg 及 bg.jpg 移到專案目錄 13



 用 Notepad++ (快裝) 把 13\13.cbp 專案檔打開

兩個working_dir 要改成 "."  再存檔


3. glm模式
3.1. 檔案準備好 source.zip (glm.h glm.cpp(改), transformation.c)
3.2. 模型準備好 gundam還沒切開.zip 裡有 Gundam.obj Gundam.mtl Diffuse.jpg 
3.3. 要加入程式 (在week13_robot 專案中, Add 把 glm.cpp 加入)
3.4. 用 Notepad++ 開 transformation.c 要偷裡面的程式
       #include "glm.h"
       GLMmodel * pmodel = NULL;
       再 copy drawmodel() 的函式, 改glmReadOBJ("檔名") 及 改右邊 glmDraw(... GLM_TEXTURE) , 並在 display()裡叫 drawmodel()















































































沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...