because of少人 所以改第二節考試!
第一節課先複習and上課
https://jsyeh.org/3dcg10/
先在小葉的網站上下載window32跟data!
之後把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迴圈,壓在最後面
}
把鋼蛋加上貼圖後的樣子
但是顏色好像反過來了 不過無所謂
大概就這樣 結束!~
沒有留言:
張貼留言