2023年4月19日 星期三

愛喝奶茶的石靈-week10 期中考

 because of少人 所以改第二節考試!

第一節課先複習and上課

https://jsyeh.org/3dcg10/

先在小葉的網站上下載window32data!

之後把data資料丟進win32資料夾裡面


data資料夾裡面有.mtl的資料 代表著material

裡面有[v] (x y z)的數值 v代表著vertex頂點

vt代表貼圖的座標 t=TexCoord

vn代表打光用的法向量 n=Normal

後面都有2或3f 代表點線面的面 通常要3or4個頂點


開始第二節課

先考試!

(5分鐘後)搞定 沒難度

繼續上課

#include <GL/glut.h>

#include "glm.h"

GLMmodel * pmodel=NULL;

void display()

{


    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );

    ///glutSolidTeapot(0.3);///畫出一個實心茶壺,它的大小0.3

    if(pmodel==NULL){

        pmodel=glmReadOBJ("Al.obj");

        glmUnitize(pmodel);

        glmFacetNormals(pmodel);

        glmVertexNormals(pmodel,90);

    }

    glmDraw(pmodel,GLM_MATERIAL);

    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方


}



int main(int argc, char *argv[])


{///上面是特別的main()函式 有很多參數


glutInit(&argc, argv);///把GLUT開起來


    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示設定


    glutCreateWindow("week10");///要開視窗


glutDisplayFunc(display);///要顯示對應的函式


glutMainLoop();///最後用main迴圈,壓在最後面


}

第二節課一堆東西
反正就是把data資料全丟進C:\Users\Administrator\Desktop\freeglut\bin裡
然後把glm.c跟glm.h丟進當週的資料夾裡
要把.c那個改成.cpp
然後當週week那邊又健add file 把glm.cpp加進去就可以了
這是用例題的
然後下課

第三節課
改用鋼蛋

#include <GL/glut.h>
#include "glm.h"
GLMmodel * pmodel=NULL;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
    ///glutSolidTeapot(0.3);///畫出一個實心茶壺,它的大小0.3
    if(pmodel==NULL){
        pmodel=glmReadOBJ("Gundam.obj");
        glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel,90);
    }
    glmDraw(pmodel,GLM_MATERIAL);
    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}


int main(int argc, char *argv[])

{///上面是特別的main()函式 有很多參數

glutInit(&argc, argv);///把GLUT開起來

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示設定

    glutCreateWindow("week10");///要開視窗

glutDisplayFunc(display);///要顯示對應的函式

glutMainLoop();///最後用main迴圈,壓在最後面

}
然後開始用貼圖
用以前先設定compiler3部曲
Search-Compiler-C:\OpenCV2.1\include
Search-Linker-c:\OpenCV2.1\lib
Linker-cv210
Linker-cxcore210
Linker-higjgui210
用好後要重開
#include <GL/glut.h>
#include "glm.h"

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

#include <opencv/cv.h>

#include <GL/glut.h>
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;

}
GLMmodel * pmodel=NULL;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
    ///glutSolidTeapot(0.3);///畫出一個實心茶壺,它的大小0.3
    if(pmodel==NULL){
        pmodel=glmReadOBJ("Gundam.obj");
        glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel,90);
    }
    glmDraw(pmodel,GLM_MATERIAL|GLM_TEXTURE);

    glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方

}


int main(int argc, char *argv[])

{///上面是特別的main()函式 有很多參數

glutInit(&argc, argv);///把GLUT開起來

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///顯示設定

    glutCreateWindow("week10");///要開視窗

    myTexture("Diffuse.jpg");

glutDisplayFunc(display);///要顯示對應的函式

glutMainLoop();///最後用main迴圈,壓在最後面

}
把鋼蛋加上貼圖後的樣子
但是顏色好像反過來了 不過無所謂
大概就這樣 結束!~

沒有留言:

張貼留言