본문 바로가기

전체 글75

0. SDL2 개발 환경 설정하기 SDL2 개발 라이브러리 내려받기 SDL은 Simple DirectMedia Layer의 약자로 밸브 게임 社의 주도 아래 유지 보수하고 있는 다목적 멀티미디어 라이브러리다. C언어로 작성되어 있어서 사실상 거의 모든 플랫폼으로 빌드할 수 있고 그래픽뿐 아니라 오디오, 파일 시스템 등 게임 개발에 필요한 기능들을 모두 제공한다. SDL1에서 SDL2로 업데이트되면서 상대적으로 무거워졌다는 의견이 많았으나 지금 시대에서는 SDL2도 가벼운 라이브러리에 들어간다. SDL2를 이용하면 간단하게 그래픽이 들어간 작업물을 제작할 수 있다. 그걸 이용해서 코드로 작성한 알고리즘을 시각적으로 이해하는 것을 목표로 한다. 이제 SDL2를 설치해보자. ▼ SDL2 공식 홈페이지 www.libsdl.org/download.. 2021. 1. 17.
1. 역순(Reverse) 역순(Reverse)의 개념 역순(Reverse)은 앞에서 n번째 값과 뒤에서 n번째 값을 차례로 교환한다. 두 값을 교환하기 때문에 배열 길이의 절반의 순환문만 돌면 된다. 만약 배열 길이만큼 돈다면 역순의 역순이라 다시 본래의 순서대로 된다. ▼앞에서 n번째와 뒤에서 n번째를 교환한다. C99 ▼ 관련 개념 Loop & Pointer & Call By Address ▼ 구현 코드 void Swap(int* lhs, int* rhs) { int _temp = *lhs; *lhs = *rhs; *rhs = _temp; } void Reverse(int iArr[], int length) { for (int i = 0; i < (length / 2); i++) { Swap(&iArr[i], &iArr[le.. 2021. 1. 17.
4. 삼각형 움직이기 이번엔 아주 간단한 애니메이션을 적용시켜본다. 쉐이더 역시 하나의 프로그램이기 때문에 외부에서 변수를 받아서 변환할 수 있는 것을 연습할 수 있다. 삼각형을 움직이는데 필요한 변수 선언 ▼ 코드 //--------------------------------------------- GLuint VAO, VBO, shader, uniformXMove; // 방향값(왼쪽, 오른쪽) bool direction = true; // 삼각형의 차이값 float triOffset = 0.0f; // 삼각형의 최대 차이값 float triMaxOffset = 1.0f; // 삼각형의 변화값 float triIncrement = 0.01f; //-------------------------------------------.. 2021. 1. 17.
0. 교환함수(Swap) 포인터 방식 C99 ▼ 관련 개념 Pointer & Call By Address ▼ 구현 코드 void Swap(int* lhs, int* rhs) { int _temp = *lhs; *lhs = *rhs; *rhs = _temp; } ▼ 사용 예시 Swap(&lhs, &rhs); 포인터(*)를 이용한 방법이다. 포인터는 C 표준에서는 함수 인자에 직접적으로 접근할 수 있는 유일한 방법이다. CPP B.11 ▼ 관련 개념 Reference & Call By Reference ▼ 구현 코드 void Swap(int& lhs, int& rhs) { int temp = lhs; lhs = rhs; rhs = lhs; } ▼ 사용 예시 Swap(lhs, rhs); 참조자(&)를 이용한 방법이다. CPP에서 추가.. 2021. 1. 17.
3. 삼각형 그리기(2) 지난 정리에 이어 이제 쉐이더 프로그램을 만들어보기 전에 이전 코드를 정리한다. 특정 기능을 하는 코드들을 되도록이면 묶어서 함수로 만드는 것이 좋은 것도 있지만 쉐이더의 코드 역시 꽤 길기 때문이다. CreateTriangle 함수 ▼ 삼각형 정점 좌표, VAO, VBO를 모두 함수로 빼낸다. GLuint VAO, VBO; void CreateTriangle() { GLfloat vertices[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f }; // OpenGL 정점 배열 생성기를 사용해서 VAO를 생성 glGenVertexArrays(1, &VAO); // 우리가 생성한 VAO를 현재 수정 가능하도록 연결한다. glBindVertexA.. 2021. 1. 17.
210115(금) 코로나의 영향으로 프로그래밍 수업의 순서가 꼬여서 중간에 알고리즘 수업을 진행했다. 먼저 교수님께서 프로그래밍 수업을 듣는 우리가 얼마나 C에 대해서 이해하고 있는지 확인하기 위해 문제를 내주셨다. 두 배열의 합을 저장하는 배열 출력하기 ▼ 문제 내용 인자를 5개~10개 가지는 동일한 크기의 배열 두 개를 선언하고 임의의 값으로 초기화 한다. 배열 하나를 더 이용해서 두 배열의 같은 색인의 인자들끼리 합을 저장하고 출력하는 함수를 만들어서 출력하라. ▼ 문제 목적 배열과 순환문에 대해서 이해하고 있는지 확인하는 문제다. ▼ 내가 푼 코드 #include void Print(int a, int b, int c) { printf("iArr1(%d) + iArr2(%d) = iArrR(%d)\n", a, b,.. 2021. 1. 15.