(1)複習上次LESSON 32
(2)Open CV 設定 讀圖
(3)Open GL 設定
(4)貼圖設定 讀圖
(5)有能力做小遊戲
第一步
先設定環境
Project > Build options >
Search directories
Compiler 新增 c:\opencv2.1\include
Linker 新增 c:\opencv2.1\lib
Linker settings
cv210
cxcore210
highgui210
接著要複製三個檔案從
C:\OpenCV2.1\bin
複製
cv210.dll
cxcore210.dll
highgui210.dll
貼到檔案資料夾中
再打上
簡單幾行程式碼
#include <opencv/highgui.h>
int main()
{
IplImage *img = cvLoadImage("image.jpg");
cvShowImage("2DDDDD",img);
cvWaitKey(0);
}
就可以順利執行了!
第二步
開始打3D部分
一樣先設定環境
Build options
Search directories新增
C:\Users\USER\Desktop\freeglut\include
Linker新增
C:\Users\USER\Desktop\freeglut\lib
Linker settings新增
freeglut
opengl32
glu32
gdi32
winmm
再將freeglut.dll 複製到檔案資料夾中
開始打3D程式碼
main中新增
glutInit(&argc,argv);
glutCreateWindow("3D");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
再一個函式
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,1,0);
glutSolidTeapot(0.5);
glPopMatrix();
glFlush();
angle +=0.1;
}
最後就可以順利執行了!!
有一個會旋轉的茶壺跟地球地圖
最後新增一大堆很長很長的程式碼
void init()
{
IplImage * img = cvLoadImage("image.jpg");
///讀圖檔
cvCvtColor(img, img, CV_BGR2RGB);
/// ConVerT Color 把圖 BGR 變成 RGB
glEnable(GL_TEXTURE_2D);
///開啟 2D貼圖功能
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);
///參數設定 貼圖 S軸 如果超過了, 就REPEAT
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
///參數設定 貼圖 T軸 如果超過了, 就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);
} /// 很長的一行, 把 image的圖, 全部設成貼圖的內容
完成品!!!!!
最後改變成圓球
void display()
{
glEnable(GL_DEPTH_TEST);
///有深度(depth)測試的功能, 才會有正確的景深/前後關係
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清畫面
glPushMatrix(); ///備份matrix
glRotatef(90, 1,0,0);
glRotatef(angle, 0,0,1);///為了自動轉的角度angle
gluQuadricTexture(quad,1);///自動轉
gluSphere(quad,0.5,30,30);///球體
glPopMatrix(); ///還原matrix
glFlush();///把馬桶沖出去
angle+=0.1; ///為了自動轉的角度angle
}
沒有留言:
張貼留言