2022年4月12日 星期二

瘋狂無敵圖學死亡筆記 Week08

了解OBJ模型檔 (v vt vn f)、介紹glm.h glm.cpp (c)與.cbp專案 .obj物件 .mtl材質 


0.  jsyeh.org/3dcg10 下載

windows.zip => 下載\windows\Light Material.exe

data.zip    => 下載\windows\data\ 3D模型

source.zip 

執行 Light Material.exe 今天的主角(打光/模型)


0-1. freeglut Moodle下載/安裝, lib\libglut32.a

File-New-Project, GLUT專案, 偷它的程式 放 Notepad++

GLUT callback 像是 display() mouse() motion() keyboard(), 有期中考題,像是 glPushMatrix()等, 重點是打光的陣列、打光的函式.zip



#include <GL/glut.h>


GLUT callback ? 會被 GLUT 呼叫的函式

我們寫的那些display() keyboard() mouse() motion()函式



0-2. 從 GitHub 拿出上週的程式!!! week06_light 

git 下載你上週的程式

git clone 下來 或在你的專案資料夾裡 git pull

把 week06_light\main.cpp 用 Notepad++ 開起來, copy

paste 到 week08_model 的 main.cpp

執行,會看到打光的黃色茶壼



0-3. 把 source.zip 看裡面的3個程式 glm.h glm.c lightmaterial.cpp, 拿裡面的程式來用,便能讀入3D模型




0-4. 把 source.zip 看裡面的3個程式 glm.h glm.c 研究 lightmaterial.cpp, 拿裡面的程式來用,便能讀入3D模型, 要include 雙引號的 glm.h 要把 glm.c改檔名成glm.cpp 並加入專案, 再用 Notepad++研究學習lightmaterial.c的程式內容 .zip


1. glm.h 我們要 include 它

2. glm.c 改檔名 glm.cpp 要加入專案

3. lightmaterial.cpp 用 Notepad++ 偷


#include <GL/glut.h> //角括號,是系統的include裡 的檔案

#include "glm.h" //雙引號,同目錄裡 的檔案



GLMmodel* pmodel = NULL; //指到GLMmodel模型的指標,NULL代表還沒好



void drawmodel(void)

{

    if (!pmodel) {

pmodel = glmReadOBJ("data/soccerball.obj");

if (!pmodel) exit(0);

glmUnitize(pmodel);

glmFacetNormals(pmodel);

glmVertexNormals(pmodel, 90.0);

    }


    glmDraw(pmodel, GLM_SMOOTH);

}///用來畫3D模型的程式碼, "學習它"



2. 畫 3D 模型檔

把 glutSolidTeapot()改成畫 drawmodel(), 要在CodeBlocks下方 藍色Build Log 找你的 working dir 工作目錄:(in C:\Users\...\Desktop\freeglut\bin\)目錄, 在裡面放 data資料夾, 以便讀取 data裡的模型, 再把glm.cpp 及 glm.h 放在 week08_model 目錄中, 再 Add files 把 glm.cpp 加到專案中



2-1. 各種模形都可以放在專案 week08_model (記得File-Save Project存檔, 放到 GitHub 裡)


2-2. 介紹3D模型相關資料

1. Wavefront OBJ 檔 https://zh.wikipedia.org/wiki/Wavefront_.obj%E6%96%87%E4%BB%B6

2. Wavefront OBJ 英文介紹較詳細https://en.wikipedia.org/wiki/Wavefront_.obj_file

3. OBJ vs. MTL 檔

4. v 是 vertex, vn 是 vertex normal, vt 是 vertex texture貼圖 coordinate, f 是 face 面


3. 期中考 OpenGL 必背10函式

  glPushMatrix(); //備份矩陣

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

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

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

   glBegin(GL_POLYGON);//開始畫

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

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

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

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

  glEnd();//結束畫

glPopMatrix(); //還原矩陣

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...