=======================
=======================
=======================
SDL 다운로드 링크: https://www.libsdl.org/
=======================
=======================
=======================
출처: http://tibyte.kr/231
VS2013에서 SDL2와 SDL_Image, openGL을 사용하기 위해
개발환경을 설정하는 단계를 포스팅해봅니다.
1 .SDL 홈페이지(https://www.libsdl.org)에서 SDL2 다운로드 페이지로 들어간다.
2. Windows용Development Libraries zip 파일을 다운받아서 압축을 푼다
3. 비주얼스튜디오를 열고 win32 콘솔 프로그램 프로젝트를 만든다.
4. 프로젝트 속성 창을 열고 Configuration Properties의 VC++ Directories로 들어간다.
5. Include Directories 항목에는 SDL2의 헤더파일(.h)이 있는 폴더를 지정하고,
Library Directories 항목에는 SDL2의 lib파일이 있는 폴더를 지정한다.
여기서 32비트와 64비트가 있는데 32비트로 진행하였다.
6. 이제 링커 설정에서 라이브러리 의존성을 지정해야 한다.
5번과 같은 속성창에서 Linker - Input - Additional Dependencies에
라이브러리 파일의 이름을 추가해도 되지만 여기서는 소스코드에 직접 넣었다.
1
2
3
4
5
6
7
8
9
|
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
#include <SDL.h>
|
cs |
소스코드의 윗부분에 #pragma comment로 lib파일을 쓰면 된다.
SDL2.lib과 SDL2main.lib을 추가한다.
경우에 따라 라이브러리파일의 이름이 SDL2.lib이 아니라 SDL.lib일 수도 있으니 주의.
7. 이제 SDL의 이미지파일 처리 등을 도와주는 SDL_Image 라이브러리를 설치한다.
https://www.libsdl.org/projects/SDL_image/에서
2번과 같이 Development Libraries zip파일을 받는다.
5번에서처럼 Include Directories와 Library Directories를 각각 추가한다.
*다른 SDL 관련 추가 라이브러리도 이와 같은 방법으로 추가하면 된다.
8. 사용할 라이브러리와 헤더파일들을 소스코드에 명시한다.
opengl함수들을 직접 사용하기 위해서는 opengl32.lib 파일을 링크해야 한다.
1
2
3
4
5
6
7
8
9
|
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
#pragma comment (lib,"SDL2_image")
#pragma comment (lib,"opengl32.lib")
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_image.h>
|
cs |
※ 실행시 SDL.dll을 찾을 수 없다는 오류가 난다면
다운받은 라이브러리 폴더에 있는 SDL2.dll과 SDL2_image.dll을 복사하여
프로젝트 폴더 내의 Debug 혹은 Release폴더에 넣는다.
아래는 간단하게 작성해본 테스트용 코드..
프로젝트 디렉토리에 res 라는 폴더가 있고
그 폴더에 있는 img.png 파일(512x512)을 로드하여 화면에 표시한다.
(SDL의 함수들만 사용해도 이미지를 띄울 수 있지만
opengl함수들을 사용해보기 위해 아래와 같이 작성하였습니다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#pragma comment (lib,"SDL2")
#pragma comment (lib,"SDL2main")
#pragma comment (lib,"SDL2_image")
#pragma comment (lib,"opengl32.lib")
#include <cstdio>
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_image.h>
using namespace std;
int main(int argc, char **argv){
SDL_Window *win = NULL;
SDL_Surface *image;
SDL_RWops *rwop;
rwop = SDL_RWFromFile("../res/img.png", "rb");
image = IMG_LoadPNG_RW(rwop);
GLubyte *map = (GLubyte*)image->pixels;
//Initialize SDL.
if (SDL_Init(SDL_INIT_VIDEO) < 0)
return 1;
//Create the window
win = SDL_CreateWindow("SDL_GL", 100, 100, 400, 300, SDL_WINDOW_OPENGL);
SDL_GLContext context;
context = SDL_GL_CreateContext(win);
glEnable(GL_TEXTURE_2D);
GLuint texId;
glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
512, 512, 0,
GL_RGBA, GL_UNSIGNED_BYTE,
map
);
// Texture filter
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
// main loop
while (1) {
//event handling
SDL_Event e;
if (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT)
break;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texId);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f(-0.7, 1.0);
glTexCoord2f(1.0, 0.0); glVertex2f(0.7, 1.0);
glTexCoord2f(1.0, 1.0); glVertex2f(0.7, -1.0);
glTexCoord2f(0.0, 1.0); glVertex2f(-0.7, -1.0);
glEnd();
SDL_GL_SwapWindow(win);
SDL_Delay(16);
}
SDL_GL_DeleteContext(context);
SDL_DestroyWindow(win);
SDL_Quit(); return 0;
}
|
cs |
실행결과
자세한 코드 내용은 다음 포스트에 계속돱니다
출처: http://tibyte.kr/231 [티바이트]
=======================
=======================
=======================
출처: http://cecilcode.blogspot.kr/2014/07/sdl.html
02. SDL 설정
SDL을 비주얼 스튜디오가 인식하게 설정한다.
개발환경은 Windows, Microsoft Visual Studio 2013 기준으로 한다.
=======================
=======================
=======================
출처: http://codinglove.tistory.com/49
1. SDL 라이브러리 구하기
SDL 공식 홈페이지에 가면 SDL 라이브러리를 구할 수 있습니다.
https://www.libsdl.org/index.php 일단 여기로 들어가시면 위 사진과 같은 화면 좌측 하단에 보이는
Download 항목의 SDL 2.0 을 클릭합니다.
우리는 SDL을 사용해서 개발을 할 것이기 때문에, 저희에게 필요한건 SDK 혹은 Development Library 입니다.
Development Library 의 항목을 보시면 운영체제 별로 나눠져 있는데
Visual Studio 의 경우 Visual C++ 32/ 64-bit 라는 라이브러리를 사용합니다.
따라서 SDL2-devel-2.0.3-VC.zip을 클릭하셔서 다운받습니다.
방금 받은 것은 sdl 의 기본 기능만 들어있는 라이브러리이기 때문에 그림을 그리거나 음악을 재생하실려면
추가적으로 SDL_image 와 SDL_mixer 라는 라이브러리를 다운받으셔야 합니다.
https://www.libsdl.org/projects/ 에 들어가시면 받으실 수 있습니다.
=============
===========
============
모두 다운받으셨으면 영어이름의 적당한 새 폴더를 만들고 (저 같은 경우는 sdl_visual c++ 라는 이름의 폴더를 만듬)
폴더 안에 다운 받은 녀석들을 모두 넣어줍니다.
(꼭 영문 이름으로 만드셔야 합니다... 한글 경로는 visual studio 2013 이 인식 못할 수도 있음...)
그리고 그 안에 압축을 모두 풀어줍니다.
이제 준비된 sdl_visual c++ 폴더를
C 드라이브나 D드라이브든 원하시는 찾기 편한 곳에 둡니다.
그럼 이제 sdl 라이브러리를 사용할 준비가 되었으니 Visual Studio 2013을 실행시킵니다.
SDL을 사용해볼 새로운 프로젝트를 하나 만들어 봅시다.
메뉴의 파일-> 새 프로젝트 를 선택합니다.
그 뒤, 프로젝트의 종류에서 "빈 프로젝트" 를 선택하시고 만드시는 프로젝트의 이름을
적절히 정한 뒤 "확인" 버튼을 누룹니다. (저는 SDL2_tutorial 이라고 지었습니다.)
이제 프로젝트가 만들어 졌으니 소스 파일을 하나 만듭시다.
솔루션 탐색기에서 자신이 만든 프로젝트의
"소스파일"에 마우스 오른쪽 버튼을 누르시고 "추가" -> "새 항목" 을 누룹니다.
그리고 추가할 소스파일의 종류를 "C++ 파일"로 선택하시고
추가할 파일의 이름을 설정하고 "추가" 버튼을 누룹니다 (저는 main.cpp 라고 이름을 정했습니다.)
이제 다시 솔루션 탐색기에서 자신이 만든 프로젝트에 오른쪽 마우스를 클릭하시고
속성을 누룹니다.
그러면 위와 같은 속성 페이지라는 대화상자가 나오는데
속성 페이지에서
구성 속성 -> C/C++ -> 일반-> 추가 포함 디렉터리의 ▼ 버튼 클릭 -> "<편집...>"을 클릭합니다.
그러면 위와 같은 대화상자가 나오는데 일단 저 폴더 모양 아이콘을 클릭하시면
무언가를 입력할 수 있는 줄이 나오는데
여기서 이제 우리가 사용할 라이브러리의 include 폴더가 어느 폴더에 있는지 적어줘야 합니다.
아직 아무것도 입력하지 마시고...
우리가 전에 압축을 풀어놓은 3개의 라이브러리 폴더가 있을 겁니다.
이중
SDL2-2.0.3 폴더에서 include 폴더에 들어갑니다.
그러면 위와 같이 헤더파일이 무수히 많을 텐데 위 사진의 붉은 부분으로 친 주소부분을 Ctrl + C 복사하시고
(참고로 제 스샷의 경로를 동일하게 입력하시면 안됩니다... 여러분은 여러분이 놓은 파일의 위치가 저와는 다를테니 말이죠
여러분이 놓은 파일 위치 주소를 고대로 복사하시면 됩니다!!)
그리고 이 주소를 방금전의 이곳에다 Ctrl + V 붙여넣기 하십니다....
그러면 경로가 등록이 됩니다...
이러한 식으로 아까 전에 우리가 만든 sdl_visual c++ 폴더에 있는 나머지
SDL_image-2.0.0 폴더의 include 폴더
SDL_mixer-2.0.0 폴더의 include 폴더
두 폴더의 경로도 추가해 줍니다. 그리고 확인을 누룹니다.
자 이제 마지막으로 라이브러리 경로를 등록해 줘야합니다.
속성 페이지에서
링커 -> 일반 -> 추가 라이브러리 디렉터리의 ▼ 버튼 클릭 -> "편집..." 을 클릭합니다.
아까와 같이 경로를 복사 붙여넣기 해주면 된다 이번에는
SDL2-2.0.3 폴더의-> lib-> x86 폴더
SDL2_image-2.0.0
폴더의-> lib -> x86 폴더
SDL2_mixer-2.0.0
폴더의-> lib -> x86 폴더
위 3개 폴더의 경로를 등록해 주면 됩니다.
(참고로 x64 와 x86 폴더 2개가 있을텐데 x64는 64비트용 라이브러리입니다.
우리는 32 비트용으로 개발 할 것이기에 x86을 선택했습니다.)
자 여기까지의 작업은 우리가 사용할 SDL 이란 라이브러리가 어느 폴더에 있는지
경로를 컴파일러에게 알려주는 과정이였고 이제 위치 등록이 끝났으니
마지막으로 이제 우리가 사용할 SDL 라이브러리를 컴파일러에게 등록하면 됩니다.
속성페이지에서
링커 -> 입력 -> 추가 종속성의 ▼ 버튼 클릭 -> "편집..."을 클릭합니다.
이곳에 우리가 사용할 라이브러리의 이름들을 적어 줍니다.
SDL2.libSDL2main.libSDL2_image.libSDL2_mixer.lib
등을 적어주고 확인을 누르고
링커 -> 시스템 -> 하위 시스템의 ▼ 버튼을 누르고 -> "콘솔"을 선택합니다.
마지막으로 속성페이지에서
적용을 누르고 확인을 눌러주면 셋팅이 끝났습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <SDL.h>
#include <stdio.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char *args[])
{
SDL_Window* window = NULL;
SDL_Surface* screenSurface = NULL;
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL could not initialize! SDL_Error: %s\n",SDL_GetError());
}else
{
window = SDL_CreateWindow("SDL Tutorial",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);
if(window == NULL)
{
printf("Window could not be created! SDL_Error: %s \n",SDL_GetError());
}else
{
screenSurface = SDL_GetWindowSurface(window);
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format,0xFF,0xFF,0xFF));
SDL_UpdateWindowSurface( window );
SDL_Delay( 2000);
}
}
SDL_DestroyWindow( window);
SDL_Quit();
return 0;
}
|
이제 준비가 다 되었으니 위의 소스코드를 똑같이 적고
빌드를 해고 실행을 해 봅시다. (빌드 ctrl + f5 )
그러면
빌드는 성공했지만 프로그램을 실행하려고 하면 위와 같은 오류가 뜨는데 이것은
SDL2-2.0.3 폴더에서 -> lib -> x86 폴더 안에
"SDL2.dll" 이란 파일이 있는데 이것을 복사한 뒤 (Ctrl + C)
지금 여러분이 만드신 프로젝트 폴더의 Debug 폴더 안에 "SDL2.dll" 파일을 넣어주면
이제 잘 실행 될껍니다.
실행결과는 위 영상 처럼 그냥
흰색 윈도우창이 약 2초간 아무 일도 없이 가만히 있다가 꺼지는
심심한 프로그램입니다...
아직 위의 코드는 몰라도 됩니다..
앞으로 하나 하나 자세히 알아봅시다.
오늘은 여기까지!
출처: http://codinglove.tistory.com/49 [나만의 게임 만들기]
=======================
=======================
=======================
'프로그래밍 관련 > 3D,2D DRAW 관련' 카테고리의 다른 글
OpenGL 오픈지엘 테스트 그리기 관련 (0) | 2017.05.10 |
---|---|
OpenGL 오픈지엘 에서 SDL, FreeImage 등등 라이브러리등등 을 이용하여 이미지 로드하기 관련 (0) | 2017.05.10 |
OpenGL 오픈지엘 glew 관련 외부 기호를 확인할 수 없습니다. 에러 관련 (0) | 2017.04.25 |
[FAQ] Directx 3D (0) | 2011.03.30 |
옥트리 관하여 (0) | 2011.03.30 |
댓글 영역