2023年4月19日 星期三

電腦圖學紀錄 3D模型

期中考

1.  glPushMatrix(); //備份矩陣

2.    glTranslatef( x, y, z);//移動

3.    glRotatef(角度, x, y, z);//轉動

4.    glScalef(x, y, z);//縮放

5.    glBegin(GL_POLYGON); //開始畫(多邊形)

6.      glColor3f(r,g,b); //色彩

7.      glNormal3f(nx, ny, nz);//打光的法向量

8.      glTexCoord2f(tx, ty);//貼圖座標

9.      glVertex3f(x,y,z);//頂點

10.   glEnd();//結束畫

11. glPopMatrix(); //還原矩陣



認識3D模型 

去 https://jsyeh.org/3dcg10/

下載date.zip、windows.zip、source.zip-->解壓縮至此

3D模型對應OBJ檔,會再引用mtl檔對應材質

obj檔裡 v對應vertex頂點、vt對應 vertex texture 貼圖座標、vn vertex normal 



GLUT專案

茶壺的程式碼(基礎10行)

#include <GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);

    glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMainLoop();
}

把source裡的glm.h和glm.c放進桌面上的week10_glm專案資料夾裡
將glm.c改成glm.cpp
在week10_glm 右鍵add file

glm.cpp加進專案


week10_glm

#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.0);
    }
    glmDraw(pmodel,GLM_MATERIAL);///從source-transformation.c裡複製
    glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10");
    glutDisplayFunc(display);
    glutMainLoop();
}






OpenCV專案

安裝葉正聖老師上課軟體--OpenCV程式


安裝第二步時 下面兩個有add的都可以選


安裝完後重開codeblock

step1: 開啟settings--compiler



step2: 設定Search dlirectories


Compeiler--加入C:\OpenCV2.1\include



Linker--加入C:\OpenCV2.1\lib


step3:設定Linker setting


在Link libraries打上
cv210
cxcore210
highgui210



week10_glm_Gondam

#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("gundam.obj");
        glmUnitize(pmodel);
        glmFacetNormals(pmodel);
        glmVertexNormals(pmodel, 90.0);
    }
    glmDraw(pmodel,GLM_MATERIAL);
    glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10");
    glutDisplayFunc(display);
    glutMainLoop();
}


#include<opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLMmodel*pmodel=NULL;
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);
    glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10");
    myTexture("Diffuse.jpg");
    glutDisplayFunc(display);
    glutMainLoop();
}






沒有留言:

張貼留言