2024年3月18日 星期一

week05

 #week05


#week05 week05-1_opencv.cpp
1. 安裝 open CV (桌面)
2.安裝第三步 ADD openCV to system PATH
3.目錄不用改
4.檔案總管檢查  OpenCV2.1 含有 include lib bin
5. 關閉 CodeBlocks  重開

寫 Open CV程式  CodeBlocks 新稱空白檔案 week05-1_opencv.cpp
圖片放置 c:裡

CodeBlocks設定
/
setting-Compiler  目錄compiler加入include 目錄
setting-Complier 目錄linker加入lib 目錄
setting-Complier 目錄linker setting 加入cv210 cxcore210  highgui210 目錄







#程式碼
#include <opencv/highgui.h>

int main()
{
    IplImage* img=cvLoadImage("c:/micky.png");
    cvShowImage("img",img);
    cvWaitKey(0);
}

//要跟著照片檔名改



------------------------------------------------------------------------------------

#課本範例-貼圖
1.開啟網址   https://jsyeh.org/3dcg10/
2.下載 windows data 檔案 解壓縮  
3.跑範例 觀察

''''cpp
glBegin(...);
    glTexCoord2f(tx,ty); glVertex2f(x,y);
    glTexCoord2f(tx2,ty2); glVertex2f(x2,y2);
    glTexCoord2f(tx3,ty3); glVertex2f(x3,y3);
    glTexCoord2f(tx4,ty4); glVertex2f(x4,y4);
glEnd();

''''






--------------------------------------------------------------------------------------------------------------------

##week05-1_texture_opencv_cvLoadImage
1.安裝 freeglut 桌面
2.新增專案 glut
3.貼上 11行GLUT程式
4.貼上今天三行程式







##程式碼
#include <GL/glut.h>
#include <opencv/highgui.h>///使用GLUT外掛
 void display()
 {
     glutSolidTeapot(0.3);
     glutSwapBuffers();
 }

int main(int argc, char *argv[])
{
    IplImage* img=cvLoadImage("c:/micky.png");
    cvShowImage("opencv",img);
    glutInit(&argc, argv);///初始化 GLUT 140
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///143

    glutCreateWindow("week05-1_texture_opencv");///145
    glutDisplayFunc(display);///148 display函式
    glutMainLoop();///174 迴圈
}



-----------------------------------------------------------------------------
##week05-2_texture_teapot_earth
1.新增專案 glut week05-2_texture_teapot_earth
2.貼上moodle 18程式碼
        https://gist.github.com/jsyeh/5ed01210559721ec71b659b3ffed2dd7
3.找地球圖片 存放至c:/







##程式碼
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    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); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    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);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09 texture");

    glutDisplayFunc(display);
    myTexture("c:/earth.jpg");

    glutMainLoop();
}

-------------------------------------------------------------------------------------------

##week05-3_texture_polygon
1.新增專案 glut week05-3_texture_polygon
2.把week05-2_texture_teapot_earth 貼上 在加四行
''''cpp
glBegin(...);
    glTexCoord2f(tx,ty); glVertex2f(x,y);
    glTexCoord2f(tx2,ty2); glVertex2f(x2,y2);
    glTexCoord2f(tx3,ty3); glVertex2f(x3,y3);
    glTexCoord2f(tx4,ty4); glVertex2f(x4,y4);
glEnd();

''''






#程式碼
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    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); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    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,0); glVertex2f(-1,-1);
        glTexCoord2f(1,0); glVertex2f(+1,-1);
        glTexCoord2f(1,1); glVertex2f(+1,+1);
        glTexCoord2f(0,1); glVertex2f(-1,+1);
    glEnd();
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09 texture");

    glutDisplayFunc(display);
    myTexture("c:/earth.jpg");

    glutMainLoop();
}

----------------------------------------------------------------------------



##week05-4_texture_earth_rotating
1.新增專案 glut   week05-4_texture_earth_rotating
2.貼上第二程式碼更改







#程式碼
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
    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); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
    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;
GLUquadric*quad=NULL;
void display()
{
    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(90,1,0,0);
        glRotatef(angle++,0,0,1);
        gluSphere( quad,1,30,30 );
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09 texture");
    glutIdleFunc(display);
    quad=gluNewQuadric();
    glutDisplayFunc(display);
    myTexture("c:/earth.jpg");
    gluQuadricTexture(quad,1);
    glutMainLoop();
}

沒有留言:

張貼留言