week10
背景圖
1.輸入程式碼(earth.jpg)還不能用
#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;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glTexCoord2f(0,1); glVertex2f(-1,-1);///左下
glTexCoord2f(1,1); glVertex2f(1,-1);///右下
glTexCoord2f(1,0); glVertex2f(1,1);///右上
glTexCoord2f(0,0); glVertex2f(-1,1);///左上
glEnd();///圖片左上角是(0,0),視窗左下角是(-1,-1)
glutSwapBuffers();
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10 texture background");
glutDisplayFunc(display);
myTexture("earth.jpg");
glutMainLoop();
}
2.將你準備的earth.jpg匯入freeglut->lib的資料夾內
3.新增一個flaot angle=0;在display() 加入Rotatef(angle,0,0,1)函數(讓地球旋轉)
鋼彈貼圖的程式碼
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * sphere=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;
}
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(sphere,1);
gluSphere(sphere,1,30,30);
glPopMatrix();
glutSwapBuffers();
angle+=1;///每次執行都轉1度
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10 texture earth");
glEnable(GL_DEPTH_TEST);///3D深度測試,開了才有3D效果
glutIdleFunc(display);///有空就執行display
glutDisplayFunc(display);
myTexture("earth.jpg");
sphere=gluNewQuadric();
glutMainLoop();
}


沒有留言:
張貼留言