- 今天老師開始使用遠距教學
0.1. freeglut 有裝成功
C:\OpenCV2.1\include- #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("puipui.jpg"); id2 = myTexture("bg.jpg"); glEnable(GL_DEPTH_TEST); glutMainLoop(); }
- 1.2. Fiile-New-Project, GLUT專案 week13_robot (把main.cpp內容備份)
1.3. 把貼圖範例程式 放入 main.cpp (把 puipui.jpg 改成 Diffuse.jpg) - 把 Diffuse.jpg 及 bg.jpg 移到專案目錄 week13_robot
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; void drawmodel(void) { if (!pmodel) { pmodel = glmReadOBJ("Gundam.obj"); if (!pmodel) exit(0); glmUnitize(pmodel); glmFacetNormals(pmodel); glmVertexNormals(pmodel, 90.0); } glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL); }
再 copy drawmodel() 的函式, 改glmReadOBJ("檔名") 及 改右邊 glmDraw(... GLM_TEXTURE) ,
並在 display()裡叫 drawmodel()
3.5. 圖檔Diffuse.jpg看起來需要上下反過來, 可用小畫家幫忙,存檔後再執行即可
用垂直翻轉
4. 旋轉
4.1. 先整體旋轉 glPushMatrix(); glRotatef(角度, 0,1,0); 畫圖; glPopMatrix();- glPushMatrix();
glRotatef(angle,0,1,0);
drawmodel();///glutSolidTeapot(0.3);
glPopMatrix(); 4.2. 背景的圖,移一下
5. T-R-T
5.1. 先把(許多小)模型準備好 body.obj body.mtl, arm1.obj arm1.mtl, arm2.obj arm2.mtl...
也移動到專案內
5.2. 把 GLMmodel * body = NULL 等都加上許多指標 (body, arm1, arm2)- GLMmodel* pmodel = NULL; GLMmodel* arml = NULL; GLMmodel* arm2 = NULL; GLMmodel* handl = NULL;
改程式碼
5.3. glmReadOBJ(), glmDraw(); (還沒教到)
2021電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2021年5月19日 星期三
yun_電腦圖學筆記week13
訂閱:
張貼留言 (Atom)
距地表面160 Week11
#include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) { if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...
-
【openGL】 首先(⊙v⊙)—— 打開一個新專案 ———————————————————— 再來 —— 讓他跑 結果 ——嗚哇 ———————————————————— ———————————————————— 演算法 (⊙v⊙) ——好好玩 http://madebyev...
-
前置作業 ———————————————————————————————————————— 把data丟到freeglut-bin裡面 就可以執行了! ———————————————————————————————————————— ——————————————————————...
-
安裝 3D Explorer, 解壓縮、匯入Gundam 的 OBJ檔 左上角另存, Sample APP要勾 開一個OpenGL專案 把gundam.cpp跟gundam.bmp放到專案資料夾裡 刪掉原本的main.c 加入gundam.cpp 前面 新增兩個 d...











沒有留言:
張貼留言