week09
下載上課範例
jsyeh.org/3dcg10
下載 source data win32
用notepad++ 研究 soccerball.obj soccerball.mtl
範例
開一個專案
先將 source.zip裡的glm.h和glm.c解壓縮,再把glm.c改成 glm.cpp File-New-Project, GLUT專案
將glm.h和glm.cpp 放入專案同一目錄
CodeBlocks的專案按右鍵,Add把glm.cpp 加入
把11行 GLUT程式,放進來
把glm 使用時,需要的3段程式放進來
開專案目錄後 把工作目錄改成[ . ]一個點
小數點代表現在專案的目錄
把 gundam.obj libfreeglut.dll (在bin裡面)都放到專案目錄裡面
程式碼
#include <GL/glut.h>
#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);
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
drawmodel();
glutSwapBuffers();///畫好提交
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("第7周的程式");///開GLUT視窗
glutDisplayFunc(display);
glutMainLoop();
}
安裝OpenCV-2.1, 要選PATH
重開 Codeblocks,設定貼圖的3個設定 Settings-Compiler
Compiler 加入 C:\OpenCV2.1\include
Linker 加入 C:\OpenCV.21\lib
在Linker settings裡,加入 cv210 cxcore210 highgui210
貼圖程式碼
#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;
}
成果
程式碼
#include <opencv/highgui.h>
#include <GL/glut.h>
#include <opencv/cv.h>
#include "glm.h"
GLMmodel * pmodel = NULL;
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;
}
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 | GLM_TEXTURE);
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawmodel();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("第7周的程式");
glutDisplayFunc(display);
myTexture("Diffuse.jpg");
glutMainLoop();
}


沒有留言:
張貼留言