본문 바로가기

분류 전체보기

(31)
기본 라이팅, 매트리얼, 라이팅 맵 xcode 실행할 때마다 눈에 거슬리게 나타나는 flock 에러. 고쳐볼려고 열심히 웹서핑을 했지만, 결국 못 고쳤다. 인스턴스가 두 개 실행될 때, 발생한다는 단서만 확인했다. 전혀 테스트하는데 문제가 없어서 그냥 놔두기로 했다. 큰 블로커가 아니면 그냥 넘어갈 수 있는 유연성이 필요하다. 겸허히 받아들이자. 노멀 벡터를 이용한 기본 라이팅과 반사 벡터를 이용한 스페큘러 라이팅을 구현했다. 라이팅을 구현 시 버텍스 쉐이더가 아닌 픽셀 쉐이더에 구현한다는 게 예전과 달랐다. 계산을 더 많이 하지만, 더 나은 결과물을 얻을 수 있다. 스페큘러는 역시 있어 보인다. 디퓨즈 맵을 구현해서 렌더링했는데, RGB 노이즈가 발생했다. 처음에는 UV 좌표 문제인 줄 알았다. 알고보니 이미지 불러올 때, 잘못된 포맷으..
소스 정리 그리고 깃 진도 나가야는데 소스 정리를 하고 있다. 정리하다 보니 객체를 추가하고 있고, 엔진 설계를 하고 있다. 직업병이다. 메인 함수 하나에 모두 넣고 하기가 불편하다 보니 객체를 나눌 수 밖에 없다고 항변해 본다. 유니티처럼 컴포넌트들을 추가하는 방식으로 기본 틀을 잡았다. 자연스럽게 예전 인하우스 엔진 구조가 머릿속에서 되살아 난다. 안 쓰던 C++을 사용하다 보니, 문법 구조를 찾으면서 한땀 한땀 진행한다. 깃 저장소도 셋업했다. 매번 주석 처리할 수도 없고 삭제하기에도 아쉽기도 해서 깃을 팠다. 이번에 알게 된 건 깃허브의 비공개 저장소도 올해 초 무료화 됐다는 사실이다. 나스 대신 깃허브를 써볼까 싶다. 다음에는 진도 좀 빼자.
뷰 행렬에 대한 고찰 OpenGL의 뷰행렬을 이해하는데 꽤나 삽질을 했다. 핵심은 바로 카메라는 자신의 로컬 Z축의 음의 방향을 바라본다는 사실이다. 월드 좌표계에서 카메라가 임의의 점에 있다고 할 때, 어떠한 회전을 적용하지 않았을 때, Z축은 일반 오브젝트처럼 양의 Z축을 향하지만, 카메라는 음의 Z축을 향한다고 생각하면 된다. 이 상태는 곧 화면 안으로 들어가는 방향이다. 여기서 보여지는 오브젝트들의 Z값은 카메라의 Z값 보다 작다. 즉 음의 Z축 방향에 놓여져 있다는 의미다. 만약 카메라의 Front 벡터를 얻고 싶다면, 현재 카메라 행렬의 Z축 벡터에 음수를 곱해야 한다. 마찬가지로 Z축 회전을 하고 싶다면 (0, 0, -1) 벡터를 기준으로 회전을 해야 한다. 뷰행렬은 카메라 행렬의 역행렬이다. 이 때 카메라 행렬..
투영 행렬 함수 몇 개로 3D 큐브 렌더링이 처리되니 좀 허무했다. 모두 GLM에서 제공하는 하는 것들이다. glm::rotate() glm::translate() glm::perspective() 딸내미에게 한 약속을 지키고자 정작 큐브에 가족 사진을 텍스처링하는데 대부분의 시간을 소모했다. 341x341 (1024/3) 6장의 사진을 1024x1024 텍스처에 적절하게 배치해서 저장한다. 그리고 텍스처 UV를 적절하게 설정하면 끝. 구글 피카사와 페인터 잇센셜 6로 작업했다. 이런 텍스처 생성 작업을 쉽게 할 수 있는 툴이 있으면 좋을 텐데. 조만간 블렌더를 설치해야 겠다. 다음 강좌는 카메라다. 슬슬 너저분한 소스를 정리할 시점이 다가온다.
GLM 적용 변환 예제를 실행하기 위해서는 GLM 라이브러리를 다운 받아서 설정해야 한다. GLM은 OpenGL Mathematics 의 약자이며, C++로 만들어진 벡터, 행렬 연산에 관한 라이브러리를 헤더로 제공한다. 다운 받아서 헤더 연결만 하면된다. 렌더링 엔진을 만들려고 하면 당연히 벡터, 행렬 구조체를 직접 만드는 걸 당연히 생각했는데, 이런 라이브러리가 있다니. 좋은 세상이다:) 여기서 삽질한 것은 두 가지다. Xcode에 헤더 연결하기 glm::mat4 구조체 초기화하기 1. Other C Flags, Other C++ Flags 속성에 아래와 같은 식으로 설정했다. 프로젝트 내부 폴더에 해당 라이브러리 폴더를 복사해서 사용했다. C++에는 프로젝트 디렉토리를 설정하는 매크로가 있다는 사실을 오랜만에 ..
OpenGL을 공부하는 이유 회사에서 게임잼을 했을 때, 느꼈다. 캐릭터 제어 같은 게임 플레이 로직을 구현하지 않은지 참 오래 됐다는 것을. 기본적인 벡터, 행렬 사용하는데 꽤나 버벅거렸다. 안 보면 잊혀지듯, 안 쓰면 잊혀지는 것이 특별할 게 없긴하다. 결국 시간에 쫓기어 레이싱 게임이란 걸 처음으로 만들었다. 원형 트랙을 구현하고 차량의 방향 벡터를 구하기 위해 수직 벡터를 계산하는 간단한 것들에 많은 시간을 허비했다. OutRun 레이싱 게임을 그때는 구현을 어떻게 했는지 궁금해서 검색하다가 기본적인 트랙을 구현한 유투브를 보았다. C++을 이용한 코드들을 보여 주는데 투영 행렬을 처리하는 코드를 보고 불끈! 2D 점을 3D 점으로 투영하는 기본 렌더링을 직접 구현해 보기로 결심했다. 좀 하다 흐지부지 될지언정. 끓어오를 때..
시작! 이웃 블로그 OpenGL 강좌 감사 댓글 달려다 보니, 티스토리 블로그 개설까지 하게 됐다. 예전에 티스토리 만들려고 할 때, 초대장 있어야 만들 수 있어서 진입 장벽이 높아 포기했었는데, 이제는 쉽게 할 수 있다. 게임 프로그래밍이라고 이름을 붙여봤는데, 포스팅을 할지는 아직 미지수다. 어쨌든 개설 기념 첫 글 투척:)