비밀 글로 되어 있었다
세상엔 좋은 사람들이 많은데
나는 왜 그런 사람들을 못 만나는가 했는데
다 이유가 있었다
예전에 파일로 만들어 놓은 게 있었는데 어디있는지 모르겠고
지금은 버전도 2.4 이상 버전으로 바뀌어서
다시 어차피 새로 만들어야 한다 잘 따라 오자
1. OpenCV 라이브러리 경로를 설정한다
- 알아서 하자 : Include, Lib, dll 등등
2. 현재는 Visual Studio 2010으로 하자
File -> New -> Project-> Visual C++ -> MFC Application 을
선택한 후 제목을 입력한다
3. Multiple Document를 선택한다 Tabbed documents는 Visual Studio에
새로 추가된 항목이다 체크를 안 하면 이전처럼 분리된 윈도우가 된다
그래서 우리는 에전 스타일로 하기 위해 체크 표시를 해제한다
Project Style은 MFC Standard 를 선택한다 뭐 자유 자재로
사용할 수 있다면 다른 것을 선택해도 상관 없다
Visual Stype and Colors 는 Window 7 를 설정했다
Resource language는 Korea를 해도 상관 없다
Use Unicode libraries는 가능한 유니코드를 사용하기 때문에 놔두는데
OpenCV가 유니코드를 지원 안 한다는 이야기가 있어서 나중에 다시 고려해야 한다
4. 다음을 누르면 다음과 같은 화면이 나온다
ActiveX Controls는 취소한다
최근 파일 리스트 갯수를 15개로 하면 편할 것이다
5. View는 ScrollView로 선택하고 Finish를 누른다
클래스나 파일 이름은 MyImgProc으로 한다
그리고 나서 Ctrl + F5를 눌러서 실행하면 다음과 같은 화면이 나올 것이다
다음과 같은 코드를 통해 그리기(Drawing)이 이루어진다
2-2 는 사각형을 칠할 색상이다
2-3dms 사각형을 그린다.
glRectf(x1, y1, x2, y2);
(x1, y1)은 좌측 하단 좌표, (x2, y2)는 우측 상단 좌표이다
핵심은 z = 0 인 평면에 사각형을 그린다
다음 코드는 화면에 그리는 코드이다
3-1 은 화면 사이즈에 맞게 끔 늘려주는 함수이다
뷰 포트라고 하고 처음 두 좌표가 시작점이고 마지막 두 점이 끝 점이다
보통 화면에 다 이미지를 채우고 싶으면 위와 같이 작성한다
3-2 는 Projection Matrix를 사용하겠다는 의미이다
Projection 종류는 두 가지가 있다
Orthographic Projection 과 Perspective Projection 이 있다
여기서는 Orthographic Projection에 대해 자세히 다룬다
glOrtho() 함수가 핵심인데 6개의 인자는 다음과 같다
left, right, bottom, top, near, far 이다
left, right - x 축 최소 최대
bottom, top - y 축 최소 최대
near, far - z 축 최소 최대
z 축의 경우는 값이 작아질수록 관측자로부터 물어진다
near, far 의 값은 Z = 0을 사이에 두고 값이 있으면 된다
즉 -1 ~ 1 이어도 상관 없고 -5~5 이어도 상관 없다
만약 near, far 값이 3 ~ 5 이면 클리핑 영역이
직사각형 앞 쪽에 있으므로 빨간 사각형이 화면에 보이지 않는다
마찬가지로 -7 ~ -9로 두면 클리핑 직육면체가 사각형 뒤 쪽에 있으므로
보이지 않는다
값을 넣어서 테스트 해보기 바란다
glOrtho()의 인자 값을 바꾸어서 테스트 해서 감을 잡아봐라 많은 도움이 될 것이다
해상도 600 x 600 화면에 오른쪽 위의 1/4을 채운 빨간 사각형을 그리고 싶으면
다음과 같은 값을 주면 된다
glViewport(0, 0, 600, 600);
glRectf(0.0f, 0.0f, 10.0f, 10.0f);
glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, 1.0f, -1.0f);
다음과 같은 코드도 가능하다
glViewport(0, 0, 600, 600);
glRectf(0.0f, 0.0f, 2.0f, 2.0f);
glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 0.001f, -0.005f);
기본은 끝났다 다음은 기본 도형들을 그려보자
프로그래밍 연습
1. 사각형을 다음과 같은 비율과 위치로 나오게 해보라
가로 5 세로 2 위치 왼쪽 아래 꼭지점이 화면 가운데 나오게 하기
결과는 다음과 같을 것이다
2. near, far 가 -1 ~ 1 과 1 ~ -1 이 무슨 차이인지 조사해 보라
glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, 1.0f, -1.0f);
glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -1.0f, 1.0f);
위의 두 줄의 코드는 무슨 차이인가?
다음은 전체 코드이다
기본 코드를 확인해보자
SetupRC() 함수는 초기에 한 번 호출 된다 ( Init() 함수와 같다고 보면 된다 )
SetupRC() 함수 안에 Region 1 안에 glClearColor(0.0f, 0.0f, 1.0f, 0.0f); 를 입력한다
이 함수는 지우는 색을 지정하는 함수이다
일단은 처음에 한 번만 지정한다
Region2에 다음 코드를 입력한다
glClear(GL_COLOR_BUFFER_BIT);
Color Buffer(색상 버퍼, 픽셀 버퍼)를 지우는 함수이다
GL_COLOR_BUFFER_BIT로 플래그로 설정한다
색상 버퍼 이외에도 버퍼 종류로는 깊이 버퍼, 스텐실 버퍼 등이 있다
이 버퍼들은 이후에 자세히 다룬다
glutSwapBuffers() 함수를 추가한다
이 함수는 더블 버퍼일 때 Front Buffer와 Back Buffer를 교체한다
코드의 추가 내용은 다음과 같다
결과 내용은 다음과 같다
우리가 원하는 대로 창을 지정한 색으로 다 지우고 그 색으로 채웠다
다음 과정은 이 위에 원하는 그림을 그리자
아래의 코드는 전체 코드이다
* 프로그래밍 연습
1. 배경 화면을 빨간색으로 채워보자
2. 배경 화면을 녹색으로 채워보자
3. 배경 화면을 노란색으로 채워보자
앞으로 사용될 기본 코드이다
Visual Studio 2010을 사용했다
Console Application을 사용했고
Empty Project이고 Unicode에서 구현한다
다음 소스는 기본 틀이다
맨 위의 주석 두 줄은 GPL License의 기본 틀이다
OpenGL 기본 세팅은 생략한다 다른 사이트를 참고하기 바란다
크게 다른 프로그램을 만들지 않는 한 Region 으로 구분, 코드를 추가한다
다음은 실행 결과이다
코드와 일치시켜서 알 수 있는 것은
4-3과 4-4의 코드가 적용 되었다는 것을 확인
4-3 윈도우 사이즈가 800 x 600 이다
4-4 윈도우 타이틀 제목이 "OpenGL Basic Code Window~~!!" 이다
4-8 은 GLUT 프레임 워크를 실행하는 기능이다
4-5는 화면의 사이즈가 변할 때 호출되는 콜백함수(ChangeSize)를 등록한다
4-6은 화면이 그려질 때 호출되는 콜백 함수를 등록한다
다음에 할 일은 창에 나타난 부분이 배경화면인데
이 부분을 지우는 부분을 구현하도록 한다
즉 창 바탕 화면을 원하는 색으로 칠해보도록 하자
* 프로그래밍 연습
1. 윈도우 사이즈를 400 x 200으로 수정해보자
2. 윈도우 타이틀 제목을 "Hello, World"로 바꾸어 보자