저번시간에 이어 소스를 조금 추가해보죠!


#include <GL/glew.h>
#include <GL/freeglut.h>
#include <iostream>

void renderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(1.0, 0.0, 0.0, 1.0); //clear red

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(50, 50);
    glutInitWindowSize(800, 600);
    glutCreateWindow("OpenGL First Window");

    glewInit();
    if (glewIsSupported("GL_VERSION_3_3"))
    {
        std::cout << " GLEW Version is 3.3\n ";
    }
    else
    {
        std::cout << "GLEW 3.3 not supported\n ";
    }

    glEnable(GL_DEPTH_TEST);

    // register callbacks
    glutDisplayFunc(renderScene);

    glutMainLoop();

    return 0;
}

크게 glut 디스플레이 루틴에 장면을 렌더링하는 콜백함수를 추가하였고 glew를 초기화하는 부분과 그래픽카드의 OpenGL 지원을 체크하는 조건문을 추가하였습니다.


위에서 등장한 함수들에 대한 설명입니다.


glutInit:

GLUT 라이브러리 초기화 함수 입니다.


glutInitDisplayMode:

OpenGL 의 디스플레이 모드를 지정합니다. 이 함수는 unsigned int 형을 인자로 받으며 여러 옵션을 지정하기 위해 bit OR 연산자로 묶을 수 있습니다.


GLUT_DEPTH 는 OpenGL 이 깊이 버퍼를 사용하도록 지시합니다. 깊이버퍼는 두 개 이상의 오브젝트가 겹쳤을 때 어떤 색을 출력할지를 결정하는데 사용됩니다.

GLUT_DOUBLE 은 OpenGL 이 더블버퍼링 시스템을 사용하도록 지정합니다.

GLUT_RGBA 는 32비트 Framebuffer 를 8비트의 RGBA 채널에 할당합니다.


glutInitWindowPosition:

윈도우 창의 위치를 픽셀 단위로 지정합니다.


glutInitWindowSize:

윈도우 창의 너비와 높이를 픽셀 단위로 지정합니다.


glutCreateWindow:

윈도우를 생성합니다. 인자로 윈도우 창의 이름을 지정하며 윈도우 ID 값을 반환합니다.


glewInit:

GLEW 초기화 함수입니다.


glewIsSupported:

인자로 전달한 OpenGL 버전이 GLEW 에서 지원할 수 있는 버전인지 확인합니다. 


glutMainLoop:

GLUT processing loop를 시작합니다.


glClear:

OpenGL이 인자로 전달된 버퍼를 비우도록 합니다. 위 코드에서는 GL_COLOR_BUFFER_BIT와 GL_DEPTH_BUFFER_BIT 를 지정하였습니다.


glClearColor:

색상버퍼를 인자값으로 초기화 합니다. 인자순서는 각각 R, G, B, A 입니다.


glutSwapBuffers:

더블 버퍼링 시스템에서 백버퍼와 프론트 버퍼를 바꿉니다.



간단하네요 :)


다음은 이번 강의 원문 링크입니다.

http://in2gpu.com/2014/10/17/creating-opengl-window/



======================================================

추가합니다.


코드를 실행시켜보면 바로 빨간 배경화면이 뜨는게 아니고 검은화면이 뜰겁니다. 그리고 마우스클릭이나 창을 움직이면 빨간배경화면으로 바뀌네요. 왜그런가 검색을 해보니 함수 호출 순서가 잘못되었네요. 먼저 glClearColor로 빨간색으로 배경색을 지정해주고 glClear로 색을 칠합니다. 다음 링크를 참조해 주세요.

http://stackoverflow.com/questions/2898503/background-colour-in-opengl

수정:
   glClearColor(1.0, 0.0, 0.0, 1.0); //clear red
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


'잡것 > OpenGL' 카테고리의 다른 글

[OpenGL 02] 셰이더를 적용해 봅시다.  (0) 2016.10.07
[OpenGL 00] OpenGL을 설치해봅시다.  (0) 2016.10.02
Posted by nfyfamraa
,

시작하기에 앞서 몇가지 알려드립니다

먼저 제 환경은 윈도우7 64bit 이며, IDE는 MS VisualStudio 2015 Community v.14 를 사용합니다.

또한 필자가 매.우. 게으르므로 이 시리즈는 연재따위가 아니며 다음 링크의 

http://in2gpu.com/2014/10/17/creating-opengl-window/

OpenGL 강의를 읽어보면서 정리한 글입니다.



자 시작해 봅시다.

OpenGL 라이브러리만 가지고 윈도우에서 OpenGL을 개발할 순 있습니다만 그러기 위해선 전반적인 winAPI 의 지식이 필요합니다.

그러므로 여기에선 그래픽 로직에만 집중할 수 있도록 FreeGLUT, GLEW 를 이용하여 예제를 작성합니다.

얘네들이 뭐하는건지는 아래 갓택오버플로우에 답변이 이미 올라와 있네요

http://stackoverflow.com/questions/19719055/what-are-the-differences-between-glu-glew-glut-qt-sdl-opengl-and-webgl


요약하자면 다음과 같습니다.

OpenGL: 2D 및 3D 그래픽을 렌더링하기 위한 크로스플랫폼 API 입니다.

GLUT: OpenGL Utility Toolkit 은 windows 환경에서 마우스와 키보드 컨트롤을 도와주는 라이브러리. win API 해보신분들은 아시겠지만 윈도우폼을 만들고 I/O 이벤트를 컨트롤 하는건 복잡하고 여간 귀찮은 일이죠.

GLEW: OpenGL Extension Wrangler Library 은 OpenGL의 확장기능들을 불러오고 사용할 수 있도록 도와주는 크로스플랫폼 라이브러리 입니다.



먼저 FreeGLUT를 설치해 봅시다. 아래링크에서 최신 안정 버전을 다운로드합니다.

http://freeglut.sourceforge.net/

GLUT와 FreeGLUT 라는 용어를 혼용하고 있어서 헷갈릴 수도 있는데 구분을 하자면 GLUT가 1998년을 마지막으로 개발자가 더 이상 업데이트를 하지않는데다 라이선스도 공개용이 아니라 사용에 문제가 있어서 X-Consortium 라이선스로 GLUT와 호환성을 유지하여 만든 것이 바로 FreeGLUT 입니다. 이하의 글에서 GLUT 라고 칭하는 것들은 모두 FreeGLUT 를 의미하는 것임을 유의해 주세요.


현재 3.0.0 버전이 최신 안정 버전이네요.

음.... 다운받아보니 뭔가 정체 모를 파일들이 많이도 있네요...

받은 압축파일은 소스코드이므로 컴파일을 해야 합니다

README 파일에 친절히 설명이 다 되어있네요.

순서대로 따라해봅시다

아래 링크에서 cmake를 다운받습니다.

http://www.cmake.org/cmake/resources/software.html


링크에 들어가보면 버전에 따라 설치버전과 포터블버전을 다운 할 수 있습니다

현재 cmake 최신 버전은 3.6.2 이며 저는 포터블버전인 cmake-3.6.2-win64-x64.zip 를 다운받았습니다.

압축을 풀고.... bin/cmake-gui.exe 를 실행 시킵니다.


Where is the source code 부분에는 freeglut 소스코드를 압축해제한 폴더를 설정해줍니다.

Where to build the binaries 에는 솔루션을 생성할 폴더를 지정합니다. 폴더이름은 freeglut로 해줍시다.

그리고 나서 왼쪽 아래 부분에 Configure을 누르고 현재 자신의 컴퓨터에 설치되어있는 VS 버전을 고릅니다. 저의 경우 Visual Studio 14 2015 이며, 이는 VisualStudio 를 키시고, 도움말 > Microsoft Visual Studio 정보 창에서 확인 할 수 있습니다.

Finish 를 누르면 configure 프로세스가 진행됩니다.



저는 DEMO 와 정적파일은 필요없으니 체크 해제하고 솔루션을 생성하였습니다.

아무래도 정적파일로 생성하면 예제프로그램들 빌드할 때 무거워질거 같아서...



Generate를 누르면 지정한 output 폴더에 VS 솔루션이 생성됩니다.

자 그럼 freeglut/freeglut.sln 을 엽니다.

빌드 단축키 F7을 눌러 빌드!


에러없이 빌드가 완료되면 freeglut/bin/Debug/freeglutd.dll 파일이, freeglut/lib/Debug/freeglutd.lib 파일이 각각 생성됩니다.

이 동적라이브러리 파일과 헤더파일을 프로젝트에 포함시켜 주어야 합니다.

VS의 기본 인클루드패스에 위 파일들을 복사해 넣거나 프로젝트 설정에서 패스를 추가로 설정해 주어야 합니다.


header include 경로에 압축해제한 폴더중 include 밑에 있는 GL 폴더를 폴더 째로 

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include 밑에 복사합니다.



빌드한 freeglutd.lib 파일은 

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib 폴더 밑에 넣고, 

freeglut.dll 파일은 

C:\Windows\SysWOW64 폴더와 

C:\Windows\System32 폴더에 각각 복사해 넣습니다.

참고로 어플리케이션의 DLL 검색 순서는 다음과 같습니다

https://msdn.microsoft.com/ko-kr/library/7d83bc18.aspx


후... 다음으로 glew를 설치해보도록 하죠

아래 링크에서 최신 릴리즈 소스파일을 다운받습니다. 현재 2.0.0가 최신이군요.

http://glew.sourceforge.net/


압축을 풀어보니 이것도 뭔가 이것저것 담겨 있군요.

build/vc12 폴더에 있는 VS 솔루션을 엽니다.

솔루션 버전과 현재 사용하고 있는 VS 버전이 다른데 프로젝트를 업그레이드할 것이냐고 물어보는데 OK를 눌러서 프로젝트를 업그레이드하고 F7 키를 눌러 빌드를 합니다.

빌드가 성공하면 bin/Debug 폴더와 lib/Debug 폴더 밑에 각각 dll 파일과 lib 파일이 생성되어 있을 겁니다.

이 두 파일과 함께 include/GL 내의 헤더파일들을 적당한 곳에 넣어줍니다.


C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\GL 에 헤더파일들을

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib 에 glew32d.lib 파일을

C:\Windows\SysWOW64 폴더와

C:\Windows\System32 폴더에 glew32d.dll 파일을 넣습니다.


후... 드디어 설치가 끝났군요. 뭐 사실 파일들을 저렇게 뿔뿔이 넣지 않고 한폴더에 모아서 예제프로젝트 내에서 패스 설정만 해줘도 되지만 전 이렇게 하고 싶었어요 데헷.


자 이제 예제 프로그램을 만들어 봅시다.

VS 에서 빈프로젝트를 만들고 Alt+F7 을 눌러 프로젝트 설정을 엽니다

링커 > 입력 > 추가 종속성 을 열고

opengl32.lib

glew32d.lib

freeglutd.lib

을 넣어줍시다



확인을 누르고 다음 코드를 복붙한 후 실행시켜 봅시다.


#include <GL/glew.h>
#include <GL/freeglut.h>
#include <iostream>

void renderScene(void) {}

int main(int argc, char **argv)
{

    glutInit(&argc, argv);
    glutInitWindowPosition(50, 50);//optional
    glutInitWindowSize(800, 600); //optional
    glutCreateWindow("OpenGL First Window");

    // register callbacks
    glutDisplayFunc(renderScene);
    glutMainLoop();

    return 0;
}


오... Nice boat...


빈창하나와 콘솔창 하나가 뜰텐데 에러가 없다면 여기까지 잘 따라오신겁니다.


지금까지 위에서 설명한 방법은 소스코드를 직접 다운받아서 컴파일하고 사용하는 방법인데 애초에 컴파일된 파일을 다운받거나 VS내의 NuGet 매니저를 사용하는 방법도 있습니다.

컴파일된 파일을 다운받아서 사용하는 것은 위에서 설명한 과정중 컴파일하는 과정만 빼고 같으니 생략하고 NuGet 매니저를 사용하는 방법을 간략하게 설명하겠습니다.

빈 프로젝트를 만드시고 프로젝트 > NuGet 패키지 관리 를 선택합니다.



nupengl.core 를 검색하고 설치합니다.

그리고 앞의 코드를 빌드 및 실행 ㅇㅅㅇ


NuGet 패키지 관리자를 사용하니까 정말 편하네요(직접 사용해보진 않았지만 말입니다 하하하하)



Posted by nfyfamraa
,




후... 드디어 마지막이네요.


1. VNC를 깝시다!

root@kali:~# apt-get install tightvncserver -y



흠.. 저는 이미 깔려있네요.  아까 업데이트 하면서 깔렸나 봅니다.

이제 tightvncserver 명령어를 실행해서 초기 설정해주면 되는데 저는 캡처를 못 떠서 이건 사진 없이 그냥 적을게요...

root@kali:~# tightvncserver

이 명령어를 실행시키면 vnc에 접속할 때 비번을 설정하라고 합니다.

vncserver 명령어로 서버를 엽니다.

root@kali:~# vncserver

이제 원격지에서 접속을 시도해봅시다.

저는 tiger VNC Viewer 를 사용했습니다.

현재 최신 안정 버전은 1.6.0 버전이며 다음 링크에서 다운받을 수 있습니다.

https://bintray.com/tigervnc/stable/tigervnc/1.6.0




안되네요.




2. VNC 화면을 마테로 설정하자!

회색화면이 뜨는 이유가 적절한 데스크탑 어플리케이션을 못찾기 때문이라는 것 같네요.

데스크탑을 마테로 설정해 줍시다.

먼저 마테를 설치합니다.

root@kali:~# apt-get install mate-core mate-desktop-environment-extra* mate-themes



마테 설치가 끝나면 계정의 홈 디렉토리의 .vnc/xstartup 파일을 vi로 열어서 수정해 줍시다.

root@kali:~# vi ~/.vnc/xstartup



이제 저장하고 기존에 열었던 서버는 닫고 다시 열어 봅시다.

root@kali:~# vncserver -kill :1
root@kali:~# vncserver


kill 옵션 뒤에 쌍따옴표와 세션 번호를 적게되는데 vnc 서버를 열 때마다 비어있는 순서대로 세션번호가 할당됩니다.

그리고 기본설정으로 각 각 세션에 590x 포트가 할당되죠.

x는 세션번호로 1번 세션에는 5901 포트가 2번 세션에는 5902 포트가 할당되는 식입니다.

어떤 세션이 열렸는지 확인하고 싶을 때에는 다음 명령어를 사용하면 됩니다.

root@kali:~# netstat --tcp -an | grep 590*


자 이제 정말로 접속해 봅시다!



위 사진처럼 서버 주소와 세션번호를 적어주면 됩니다.

포트번호로 지정해주고 싶을 땐 아래처럼 콜론 두개를 쓰면 됩니다.



이제 처음에 설정했던 vnc 접속 비밀번호를 입력해주면...



접.속.







귿귿 ㅎㅎ

Posted by nfyfamraa
,