Week08 -1
因為我們比隔壁班多一堂課所以先教新進度
今天先去葉正聖老師的網站(https://jsyeh.org/3dcg10/)
下載data 跟windows
並解壓縮後將data拉近windows中
今天還要多下載一個source並解壓縮
了解3D模型如何產生的:
v對應vertex頂點
vt對應貼圖座標 g;TexCoord2f(tx,ty)
vn對應vertex normal法向量
f對應 面facet
選擇export selection
改成objexport檔就可以在桌面開啟了
Week08-2今天的第一個程式
新增一個glut專案檔名為week08-1_glm_model
把範例都刪掉
然後輸入下列程式碼開啟一個白色的茶壺
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
上面再加入一行#include "glm.h"
要將sorce中的glm.h複製到和程式同一個資料夾程式才可以執行
在專案裡右鍵-ADD-Files加入glm.cpp 成功後左邊會有main.cpp glm.cpp
將3D模型.obj.mtl檔案放在{工作執行目錄}C:\users\administrator\Desktop\freeglut\bin
#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("10160421.obj");
glmUnitize(pmodel);
}
glmDraw(pmodel,GLM_SMOOTH | GLM_MATERIAL);
///glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
(因為我的模型是正方形所以是全白)
在創建一個新專案檔名為week08-2_glm_model_texture
老師會傳給我們檔案(鋼蛋的模型)
然後用上第二節課的程式碼再稍微新增
#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);
}
glmDraw(pmodel,GLM_SMOOTH | GLM_MATERIAL);
///glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
就會出現老師的鋼蛋了
下載OPENCV用上週交的作法 並完成設定
程式碼如下
#include <GL/glut.h>
#include "glm.h"
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
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);
if(pmodel==NULL){
pmodel=glmReadOBJ("Gundam.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel,90);
}
glmDraw(pmodel,GLM_SMOOTH | GLM_MATERIAL|GLM_TEXTURE);
///glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
myTexture("Diffuse.jpg");
glutDisplayFunc(display);
glutMainLoop();
}
最後在上傳到GITHUB
cd desktop
git clone https://github.com/dannyyu0521/2023graphicsb
cd 2023graphicsb
將檔案放入資料夾
git status
git add .
git status
git config --global user.email dannyyyu0521@gmail.com
git config --global user.name dannyyu0521
git commit -m "add week08"
git push
沒有留言:
張貼留言