2022年4月26日 星期二

week10電腦圖學

 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(); }

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...