WEEK08
Step01-1
3D圖學:網站下載 下載window.zip 和 data.zip還有source.zip
打開Transformmation.exe
看到裡面跑車的英文Porsche
看到Porsche.obj前面的英文字對應
v對應 vertex頂點
vt 對應 貼圖座標
vn 對應 vertex normal 法向量
f 對應 面face
打開MAYA
隨便做一個模型 輸出OBJ檔案(一定要有mtl檔輸出)
把程式的檔名F-16.obj 然後把檔案丟到data裡面取代裡面的F-16
Step02-1
把程式刪掉
換上以下程式碼:
#include <GL/glut.h>
#include "glm.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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
把之前下載的source.zip解壓縮
把裡面的glm.h放進去剛才的專案檔才能成功開啟茶杯
之後把source裡面的glm.c改成glm.cpp
點Add files
加入glm.cpp
#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("f-16.obj");
}
glmDraw(pmodel,GLM_SMOOTH|GLM_MATERIAL);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
把剛剛做好的模組兩個檔案都丟進去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("f-16.obj");
glmUnitize(pmodel);
}
glmDraw(pmodel,GLM_SMOOTH|GLM_MATERIAL);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
這樣就會出現一個剛好大小的模組塞進畫面
Step03-1
把老師傳給我們的Gumdam模型丟進去freegut>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("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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
glutDisplayFunc(display);
glutMainLoop();
}
就會出現鋼彈模型
Step03-2
但是鋼彈沒顏色
所以我們要讓他有顏色
點Search directoies>Compiler>Add>C槽裡面的OpenCV2.1>include
找到裡面的myTexture.cpp
#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);
if(pmodel ==NULL){
pmodel = glmReadOBJ("Gundam.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel,90);
}
glmDraw(pmodel,GLM_SMOOTH|GLM_MATERIAL|GLM_TEXTURE);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week08");
myTexture("Diffuse.jpg");
glutDisplayFunc(display);
glutMainLoop();
}
Step03-3
最後上傳GITHUB✌
安裝git 開啟GIT bash
cd desktop 進入桌面
git clone 複製你的檔案
cd 進入你的檔案
git add . 加入你的檔案
git status 確認你的檔案
git config --global user.email "你的Gmail"
git config --global user.name "你的GitHubID"
git commit -m "你的周次"
git push 上傳
結束





沒有留言:
張貼留言