2017年5月15日 星期一

Week13 閻覃的上課筆記

Week13 閻覃的上課筆記.md

Week13 閻覃的上課筆記

TRT複習

 
xxxxxxxxxx
6
1
glPushMatrix();
2
glTranslatef(0.4,0.5,0);
3
glRotatef(30,0,0,1);
4
glTranslatef(0.5,0.3,0);
5
drawArm();
6
glPopMatrix();

安裝OpenCV

首先開啟終端,使用brew安裝opencv

 
xxxxxxxxxx
1
1
brew install homebrew/science/opencv

F26D3871-93C5-47F1-B3C3-B390F0093EA4

配置Clion的工程,CMakeLists.txt

 
xxxxxxxxxx
12
1
cmake_minimum_required(VERSION 3.7)
2
project(05052553_week13)
3
4
find_package(OpenCV)
5
#或者find_package(OpenCV3)
6
include_directories( ${OpenCV_INCLUDE_DIRS} )
7
8
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -framework GLUT -framework OpenGL")
9
10
set(SOURCE_FILES main.cpp)
11
add_executable(05052553_week13 ${SOURCE_FILES})
12
target_link_libraries(05052553_week13 ${OpenCV_LIBS} )

輸入以下的程式碼

 
xxxxxxxxxx
12
1
#include <iostream>
2
#include <opencv2/opencv.hpp>
3
4
using namespace std;
5
using namespace cv;
6
7
int main() {
8
    Mat srcImage = imread("img.jpeg");
9
    imshow("img", srcImage);
10
    waitKey(0);
11
    return 0;
12
}

其中,圖片存到如下的目錄即可

59FD67F9-985A-4BFF-89C4-B9E22FBB2E9D

運行結果如下

AA8C09E8-94B0-49E7-870A-DD47FED22301

會自動轉動的地球

直接將老師的程式碼複製過來就好

 
xxxxxxxxxx
53
1
//#include <iostream>
2
//#include <opencv2/opencv.hpp>
3
#include <opencv/highgui.h> ///for cvLoadImage()
4
#include <opencv/cv.h> ///for cvCvtColor()
5
#include <GLUT/glut.h> ///3D glut
6
#include <stdio.h>
7
GLUquadric * quad;
8
GLuint id;
9
float angle=0;
10
void display()
11
{   glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
12
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
13
    glPushMatrix();///自動轉很帥
14
    glRotatef(90, 1,0,0);
15
    glRotatef(angle, 0,0,1);///自動轉很帥
16
    gluQuadricTexture(quad, 1);
17
    gluSphere(quad, 1, 30, 30);///glutSolidTeapot(0.3);
18
    glPopMatrix();///自動轉很帥
19
    glFlush();
20
}
21
void timer(int t)
22
{   glutTimerFunc(20, timer, 0);/// 1000 msec   50fps:20msec
23
    angle+=1;///自動轉很帥
24
    glutPostRedisplay();
25
}
26
int myTexture(char *filename)
27
{
28
    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
29
    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
30
    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
31
    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
32
    glGenTextures(1, &id); /// 產生Generate 貼圖ID
33
    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
34
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
35
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
36
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
37
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
38
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
39
    return id;
40
}
41
42
void myInit()
43
{   quad = gluNewQuadric();
44
    id = myTexture("image.jpg");
45
}
46
int main(int argc, char**argv)
47
{   glutInit(&argc, argv);
48
    glutCreateWindow("3D");
49
    glutDisplayFunc(display); ///顯示
50
    glutTimerFunc(0, timer, 0);
51
    myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
52
    glutMainLoop();
53
}

D0FDA22E-8961-4BFC-B3D1-C5FBE3973166

地球變茶壺

gluSphere換成glutSolidTeapot即可。具體的程式碼如下

 
xxxxxxxxxx
12
1
void display()
2
{   glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
3
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
4
    glPushMatrix();///自動轉很帥
5
    glRotatef(90, 1,0,0);
6
    glRotatef(angle, 0,0,1);///自動轉很帥
7
    gluQuadricTexture(quad, 1);
8
    //gluSphere(quad, 1, 30, 30);///glutSolidTeapot(0.3);
9
    glutSolidTeapot(0.3);
10
    glPopMatrix();///自動轉很帥
11
    glFlush();
12
}

沒有留言:

張貼留言