早安
今天要學貼圖
首先要讀入圖片
我們使用opencv的功能來做讀入
於是先下載opencv,載完之後設定codeblocks:
1. Compiler>Search directories>compiler>add(:C/opencv2.1/include)
2. Compiler>Search directories>linker>add(:C/opencv2.1/lib)
3. Compiler>Linker setting>add(cv210,cxcore210,highgul210)
設定完之後,就可以寫程式了,程式如下:
#include <opencv/highgui.h>//讀入opencv標頭檔
int main()
{
IplImage * img = cvLoadImage("NEKO.jpg");//把圖放進(freeglut/bin),用IplImage設立變數並讀入
cvShowImage("NEKO",img);//開視窗並顯示圖片
cvWaitKey(0);//持續視窗
}
寫完上面的碼
接著去複製其他源碼(要貼圖的碼太複雜):
可以看到,圖貼在茶壺上很怪
然後把茶壺刪掉,自己貼一個原圖:
一開始先熟悉貼圖,就不做花樣了
glTexCoord2f(tx,ty)代表貼圖的座標
用多邊形描點畫出來並貼圖
貼圖座標(黃點對應程式):
補充:旋轉地球:
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * quad;
void init()
{
IplImage * img = cvLoadImage("圖檔名");
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);
quad = gluNewQuadric();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(90, 1,0,0);
glRotatef(angle, 0,0,1);
gluQuadricTexture(quad, 1);
gluSphere(quad, 0.5, 30, 30);///glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week07");
glutDisplayFunc(display);
glutIdleFunc(display);
glEnable(GL_DEPTH_TEST);
init();
glutMainLoop();
}
886





沒有留言:
張貼留言