顯示具有 week07 標籤的文章。 顯示所有文章
顯示具有 week07 標籤的文章。 顯示所有文章

2021年6月25日 星期五

距地表面160 Week07

 





下載OpenCV-2.1.0-win32-vs2008.exe
下載選第2個 Add OpenCV to PATH(執行的目錄之一)
位置用預設的 C:\OpenCV2.1
安裝完重開codeblocks

cv210   cxcore210   highgui210





------
添加完畢之後尋找圖片





#include <opencv/highgui.h>
int main(int argc,char** argv)
{

        IplImage * img = cvLoadImage("0.jpg");
        cvShowImage("0.jpg",img);
        cvWaitKey(0);
}


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




#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("0.jpg"); ///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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
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("08160342");
    glutDisplayFunc(display);

    init();
    glutMainLoop();
}



2021年6月7日 星期一

電腦圖學 week07

 

到moodle下載OpenCV-2.1.0-win32-vs2008.exe
下載的時候要選第2個 Add OpenCV to PATH(執行的目錄之一)
位置用預設的 C:\OpenCV2.1
安裝完再重開codeblocks



        在codeblocks的setting點選Compiler

      Search directories 

        Compiler   C:\OpenCV2.1\include

        Linker  C:\OpenCV2.1\lib


在Linker setting 加入3個檔案
cv210   cxcore210   highgui210




找圖片加入bin目錄裡




#include <opencv/highgui.h>

int main()

{

    IplImage * img = cvLoadImage("photo.jpg");

    cvShowImage("photo",img);

    cvWaitKey(0);


}

貼到codeblocks


上半部貼上 , jpg改成自己的圖片,下面可以複製之前的貼上

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("photo.jpg"); ///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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
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("week07 texture");
    glutDisplayFunc(display);

    init();///上面把OpenGL都設好後,才設定OpenCV 的貼圖到OpenGL上面
    glutMainLoop();

}
加入座標

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("photo.jpg"); ///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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
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();
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week07 texture");
    glutDisplayFunc(display);

    init();///上面把OpenGL都設好後,才設定OpenCV 的貼圖到OpenGL上面
    glutMainLoop();

}

地球自轉

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * quad;///TODO: Quad
void init()///copy 自 http://hackmd.io/@jsyeh/opengl
{
    IplImage * img = cvLoadImage("earth.jpg"); ///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);
    quad = gluNewQuadric();///TODO: Quad
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
float angle=0;///TODO:
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///自動轉很帥///TODO:
        glRotatef(90, 1,0,0);///TODO:
        glRotatef(angle, 0,0,1);///自動轉很帥///TODO:
        gluQuadricTexture(quad, 1);///TODO:
        gluSphere(quad, 0.5, 30, 30);///glutSolidTeapot(0.3);///TODO:
    glPopMatrix();///自動轉很帥///TODO:
    ///glutSolidTeapot(0.3);
    glutSwapBuffers();
    angle++;///TODO:
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week07 texture");
    glutDisplayFunc(display);
    glutIdleFunc(display);///TODO:
    glEnable(GL_DEPTH_TEST);///TODO: 有3D的深度測試(前面會蓋掉後面)
    init();///上面把OpenGL都設好後, 才設定 OpenCV 的貼圖到 OpenGL上面
    glutMainLoop();
}




2021年4月7日 星期三

懶嵐\(。∀ ° )/ Week07

I.

玩老師的程式

II.

Step1.

安裝openCV
設定CodeBlocks -> Settings -> Compiler
等等圖檔放在freeglut資料夾的bin裡面

Step2.

上程式碼
#include <opencv/highgui.h>
int main(int argc, char** argv)
{
    IplImage*img=cvLoadImage("ame.jpg");
    cvShowImage("ame",img);
    cvWaitKey(0);
}

Step3.

把圖貼到茶壺上
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("ame.jpg"); ///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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[ ])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面
    init();

    glutMainLoop();///(5)主要程式
}

Step4.

加上原本的圖當背景

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("ame.jpg"); ///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);
 ///最後一行最難/最重要, 所貼圖影像的資料都設定好
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();
    glutSolidTeapot(0.3);

    glutSwapBuffers();
}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面
    init();

    glutMainLoop();///(5)主要程式
}







NEKO no Computer Graphics_week07

     

   


    早安

    今天要學貼圖

    首先要讀入圖片

    我們使用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



嘿嘿嘿(⊙v⊙)  Week07

放圖檔的東東(?









————————————————————

OpenCV






























————————————————————
放圖




















————————————————————
圖丟到茶壺上









————————————————————
背景跟茶壺(⊙v⊙) 








————————————————————
會轉的球形


【】week07 texture【】


跟別人連線(別人是紅色、自己是黑色)

點對應的點(箭頭)、程式部分對應的點(數字)

在用OpenCV之前要設定
圖片要放在freeglut\bin裡


init程式複製老師的(https://hackmd.io/@jsyeh/opengl)、其他複製自己以前的

背景有圖(跟茶壺同一個圖)

圓球會自動轉

小乖的圖學筆記 week07

貼圖教學

1.安裝OpenCV-2.1.0-win32-vs2008

1-1至moodle下載

1-2安裝注意事項(要點第二個)

2.設定CodeBlocks

2-1 Setting>Compiler>Global compiler settings>Linker settings

新增 cv210

新增 cxcore210

新增 highgui210

2-2 Setting>Compiler>Global compiler settings>Search directories>compiler

新增 C:\OpenCV2.1\include

2-3 Setting>Compiler>Global compiler settings>Search directories>Linker

新增 C:\OpenCV2.1\lib

3.找一張圖放在 C:\Users\Administrator\Desktop\freeglut\bin 裡並重新命名

3-1

3-2

4.打開GLUT專案(自己去week01)

5.編輯程式碼

#include <opencv/highgui.h>

int main(int argc,char** argv)

{

    IplImage*img=cvLoadImage("fight.jpg");

    cvShowImage("fight photo",img);

    cvWaitKey(0);

}

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

幫茶壺貼圖

1.打開GLUT專案(自己去week01

2.編輯程式碼(太長了 自己去 Git Hub下載07-2)

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

貼圖練習

1.打開GLUT專案(自己去week01

2.編輯程式碼(太長了 自己去 Git Hub下載07-3)

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

做地球儀

1.到 https://hackmd.io/@jsyeh/opengl下載

2.打開GLUT專案(自己去week01

3.編輯程式碼(貼上下載來的main源碼)

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...