2023年3月29日 星期三

擦 大哥 電腦圖學 week07 Texture

電腦圖學 week07 Texture

期中練習:https://jsyeh.org/gl/opengl_TRT_demo.html

STEP 01-1


打開texture.exe

圖片左下開始 依序逆時針分別改變每個角的位置


期中考題

1.  glPushMatrix(x,y,z);//備份矩陣

2.   glTranslatef(x,y,z);//移動

3.   glRotatef(angle,x,y,z);//轉動

4.   glScalef(x,y,z);//縮放

5.   glBegin(GL_POLYGON);//開始畫(多邊形)

6.    glColor3f(r,g,b);//色彩

7.    glNormal3f(nx,ny,nz);//打光的法向量

8.    glTexCoord2f(tx,ty);//貼圖座標

9.    glVertex3f(x,y,z);//頂點

10.  glEnd();//結束圖

11. glPopMatrix();//還原矩陣

好好背 其實不難

step02-1

下載OpenCV 點add PATH 安裝完後重新打開code blocks 開啟設定

搜尋 1.Compiler:C:\OpenCV2.1\include

         2.Linker:C:\OpenCV2.1\lib

         3.在Linker setting裡,加上cv210 cxcore210 highgui210(小葉說用手打比較快)



輸出照片 檔名記得改.cpp

#include <opencv/highgui.h>

int main()

{

    IplImage *  img = cvLoadImage("圖檔");

    cvShowImage("week07",img);

    cvWaitKey(0);

}


一顆旋轉的球

#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(angle, 0,-1,0);

        glRotatef(90, 1,0,0);

        gluQuadricTexture(sphere, 1);

        gluSphere(sphere, 1, 30, 30);///glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();

    angle++;

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week10 texture background");


    glutIdleFunc(display);

    glutDisplayFunc(display);

    myTexture("myEarth.jpg");

    sphere = gluNewQuadric();

    glEnable(GL_DEPTH_TEST);


    glutMainLoop();

}

作圖

#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);
    glBegin(GL_POLYGON);
        glTexCoord2f(0,0);glVertex2f(-1,+1);
        glTexCoord2f(1,0);glVertex2f(+1,+1);
        glTexCoord2f(1,1);glVertex2f(+1,-1);
        glTexCoord2f(0,1);glVertex2f(-1,-1);
    glEnd();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10 texture background");

    glutIdleFunc(display);
    glutDisplayFunc(display);
    myTexture("myEarth.jpg");
    sphere = gluNewQuadric();
    glEnable(GL_DEPTH_TEST);

    glutMainLoop();
}





沒有留言:

張貼留言