-
2.5D 구현하기 - 쿼터뷰
들어가며 여러번 2D 게임을 만들기도 하고 즐기기도 하면서 여러가지 게임 그래픽에 대한 테크닉에 대해서 공부를 해보았습니다. 참고 - 울펜슈타인3D 는 과연 어떻게 3d를 구현했을까요? 이번에는 그 중에서 쿼터뷰에 대해서 이야기를 해보고자 합니다. 등축 투영법 먼저 기본되는 원리를 알려면 등축 투영법 을 알아야 합니다. 참조 원래는 제도 분야에서 많이 쓰이는 투영법 중 하나이지만, 게임 분야에서 복잡한 3D 계산을 하지 않고, 2D 그래픽만으로도 쉽게 표현할 수 있는 장점 때문에 많이 쓰이고 있습니다. 타일 기반 2D 게임 보통...
2.5d pseudo isometric quarter-view
q_lazzarus's profile imageq_lazzarus
2022-03-27 18:00
-
github action / github page 기능을 이용한 static deploy
들어가며 github page 기능을 이용해서 수많은 사람들이 블로그로 애용 했습니다. 그렇지만 나는 이미지 파일 하나 올릴껀데? jekyll 블로그를 써야해? 라는 사람이 있겠죠? 그런 사람을 위해서 준비했습니다! summary webpack 을 이용해서 번들링할 예정이고, github action 을 통한 빌드와 배포 자동화를 진행할 예정입니다. 최근에 githuab pages 가 업데이트되어 별도의 설정 메뉴로 빠졌습니다! 이번 업데이트로 특정 branch 를 github page 로 지정 가능합니다. 아래와 같이 운영할 예정입니다. gh-pages branch 를 github page 용도로 사용할 예정입니다. main branch 는...
q_lazzarus's profile imageq_lazzarus
2022-03-02 00:00
-
svn 사용자를 위한 git 안내서
들어가며 여태까지 많은 git 안내서가 있지만, 이번에는 subversion (aka: svn) 사용자를 위한 타겟으로 글을 작성해보겠습니다. git 의 주요한 특징 먼저 git 은 subversion 과 달리 로컬에서도 원격에서도 저장이 됩니다. (원격 저장소를 여러개 두는 것도 가능하지만 여기서 다루지는 않겠습니다.) 그러다보니 commit 만 하고 끝이지 않냐? 라는 관성 때문에 많이들 고생하시고 계십니다.. 이번은 주요한 소스 올리기와 공유 에 중점으로 다뤄보겠습니다. 데이터 받아오기 svn 의 checkout 명령어 처럼 git 의 저장소를 가져오는 명령어는 clone 입니다. 로컬 저장소를 복제(clone)하려면...
q_lazzarus's profile imageq_lazzarus
2022-01-24 00:00
-
php8 에 도입되는 annotation (attributes)
php8 에 도입되는 attributes php 8 부터는 attrubutes 라는 기능을 사용할 수 있습니다. 다른 많은 언어에서는 annontation 이라고 불리는 것인데, 이 attributes (aka. annotation) 은 앞서, rman 님께서 작성해주신 Annotation 이해하기 을 참조해주세요. (이미 php8 소개하는 많은 블로그들이 있었서 늦은감이 있네요…) 일단 여기서는 어떻게 사용하는지, 또 어떻게 커스텀 attributes 를 만드는지 등에 대해서 다뤄 보겠습니다. 개요 먼저 attribute 가 작성된 예제를 올려봅니다. use \Support\Attributes\ListensTo; class ProductSubscriber { #[ListensTo(ProductCreated::class)] public function onProductCreated(ProductCreated $event) { /* …...
q_lazzarus's profile imageq_lazzarus
2021-12-01 10:00
-
왜 우리가 이제 도커를 그만 써야 할까요?
들어가며 다들 아시고 계시다시피 도커는 이미 너무나 유명하고 인기 있는 도구이며 이미 수많은 개발자/엔지니어들이 사용하고 있습니다. 모르시는 분들을 위해 설명 하자면 배포를 쉽게 하기 위해 소프트웨어를 컨테이너화할 수 있는 도구입니다. 문제는 이제 도커가 유료화 됩니다. 이미 유료화를 발표 했습니다. 새로운 가격 구조는 일반적인 유저에게는 여전히 공짜지만, 프로 유저는 한달에 5$ / 5명 이상의 팀에게는 한달에 7$ 를 가지고 이미 대규모 기업에게는 한달에 21$ 를 부담시키고 있습니다. (무려 인당) 지금 유료화하는것은 docker desktop 이며, 이미 docker...
q_lazzarus's profile imageq_lazzarus
2021-09-23 00:00
-
각 레벨의 개발자에 기대하는 것들
들어가며 먼저 이 글은 ‘다프나 로젠블룸’님의 What we expect from software developers on each level 이라는 글을 읽고 옮겨본 글입니다. 현업에 오래 있다보면, 가끔씩 나의 위치와 회사 (혹은 주변에서) 바라는 것들이 무엇인지 또한 다른 조직이나 혹은 더 넘어가서 다른 나라의 개발자들은 어떤 위치에 있는지 물어보게 됩니다. 이 글을 옮긴 의도는 제 자신의 위치와 제 자신의 앞으로 갈 방향성을 성찰해보고자 하는 자세에서 시작되었습니다. 아무쪼록 저도 해답을 빨리 얻을 수 있고, 이 글을 읽는 여러분들도 많은 해답을...
q_lazzarus's profile imageq_lazzarus
2021-07-13 18:00
-
딥러닝과 소수
과학을 잘 모르지만 과학을 좋아하고, 수포자이지만 수학을 좋아하는 제가 최근에 저를 사로잡은 내용이 있었습니다. 이름하여 바로 ‘리만 가설’ 입니다. 리만 가설 (Riemann hypothesis) 개발자 블로그에 무슨 뚱딴지 같은 이야기라구요? 수학을 잘 모르지만 개발자가 된 이상 간단한 4칙연산 뿐만 아니라 점점 더 어려운 고등수학을 살짝 발 담을 일이 많아집니다. (잘 모르셨겠지만요) 일단 리만 가설이라는 것을 알아봅시다. 리만 제타 추측은 리만 제타 함수의 모든 자명하지 않은 영점의 실수부가 1/2 이라는 추측이다. 아니 이게 무슨 말일까요… 소수 (prime...
q_lazzarus's profile imageq_lazzarus
2021-05-12 21:00
-
내 탭이 날라가 버렸어!
내 탭이 날라가버렸어! 안녕하세요 오늘 원래 이전에 이야기했던 내용처럼 웹에서 3d 엔진 렌더링을 구현하려고 하였으나 무한 루프에 빠지는 바람에… 실패하였고. 왜 무한 루프에 빠졌는데도 제 브라우져의 남은 탭들은 멀쩡한가에 대해서 고찰하였습니다. 먼저 제가 작성한 멍청한 코드를 먼저 보고 가시겠습니다. // 멍청한 코드 while (1) { // do something stupid updateWorld(); renderWorld(); } 자 이러면 진짜 멍때립니다. 어디서 이런 코드를 보겠나요? 이것은 역시나 제대로 알지도 못하고 짜면 이렇게 되는 것입니다. (이 코드가 왜 망한 코드인지는 javascript...
thread process browser chromium
q_lazzarus's profile imageq_lazzarus
2021-03-03 23:55
-
울펜슈타인3D 는 과연 어떻게 3d를 구현했을까요?
1992년 5월 5일, 울펜슈타인 3D 가 출시됩니다. 그전에도 1인칭 시점의 게임은 존재하였지만, 이 게임은 화려한 256 컬러 그래픽, 빠른 속도, 높은 프레임 레이트, 영리한 AI, 선명한 사운드 효과, 매력적인 음악을 가능하게 한 엔진으로 신선한 충격을 선사하였습니다. 울펜슈타인3D 은 과연 어떻게 3d를 구현했을까요? 레이캐스팅 이란 2차원 맵을 3차원 시점을 구현하기 위한 렌더링 테크닉입니다. 이전 시대의 PC 는 실시간으로 리얼한 3D 엔진을 구현하기에는 턱도 없이 느렸습니다. 그래서 레이캐스팅 은 첫번째 대안으로 제시되었습니다. 빠르거든요. 단순히 수직선에만 계산하면 되기...
game wolfenstain raycasting 3d
q_lazzarus's profile imageq_lazzarus
2020-12-09 13:00
-
gitlab-runnner 를 활용한 docker 배포
서론 jekyll 블로그를 사용하면서 github action 에 대해서 많이 부러움을 느꼈습니다. 여기서는 gitlab 과 gitlab-runner (+ nexus) 를 설치하여 나도 자동적으로 빌드와 배포가 되도록 CI (Continuous Integration) / CD (Continuous Deployment) 를 구성 해보았습니다. Basic Concept 기본 컨셉은 다음과 같습니다! 코드를 보내면 자동으로 도커 이미지를 생성하고 배포 대상 서버에서 컨테이너를 실행! gitlab 으로 코드를 커밋 build CI/CD (gitlab runner) 가 실행됨 코드를 도커 이미지 로 빌드하고 사설 도커 저장소 (이하 nexus) 로 배포 진행 deploy...
git gitlab gitlab-runner docker deploy ci cd
q_lazzarus's profile imageq_lazzarus
2020-09-16 06:00
-
jekyll 블로그 wsl2 + docker + vscode 에서 작업하기
계기 깃헙 블로그를 작성하기 위해서는 로컬 pc 에서 ruby 를 설치하고 jekyll 환경 구성을 해야 합니다. 오늘 포스팅을 작성할려고 했으나, windows 를 다시 깔아버려서 세팅하기가 너무 귀찮더라구요… 이번 기회에 저처럼 자주 이러저리 옮겨다니는 사람들을 위해 이번 내용을 작성하게 되었습니다. 우선 저는 windows 10 에 wsl2 와 docker 를 설치하여 사용하였습니다. wsl2 사용하기 wsl2 란? 지난 5월 윈도우 Windows 10의 대규모 업데이트가 있었습니다. 이번 업데이트는 2019년 11월 이후 첫 대규모 업데이트로 사용자를 위한 다양한 기능이 추가되었을...
jekyll wsl2 docker windows linux vscode
q_lazzarus's profile imageq_lazzarus
2020-07-15 16:08
-
phaser 로 구현해 보는 콘웨이의 생명게임
phaser 로 구현해 보는 콘웨이의 생명게임 존 호턴 콘웨이 교수님의 명복을 빕니다. 먼저 이 자리를 빌어서 ‘마법적인 천재(Magical Genius)’로 불리는 영국 태생의 수학자 존 호턴 콘웨이 프린스턴대 수학과 교수님의 명복을 빕니다. 또한 코로나19로 희생되신 모든 이들의 명복을 빕니다. 1937년 영국 리버풀에서 태어난 콘웨이 교수는 유한군, 매듭이론, 조합론적 게임이론, 블록부호 등을 만들어낸 수학자입니다. 교수님이 유명해진 것은 ‘라이프 게임(Life of Game)’이라는 개념을 고안하면서부터인데요, 임의로 배열된 세포들이 기본 법칙에 의해 자동으로 생성·소멸하면서 삶과 죽음, 그리고 증식의 퍼즐을 만들어낸다는...
phaser typescript game life cells
q_lazzarus's profile imageq_lazzarus
2020-04-28 04:00
-
babel 이란 무엇인가?
들어가며 최근에 react 프로젝트와 typescript 프로젝트를 거치면서 webpack 을 자주 써보고 세팅해보게 되었습니다. 처음에는 동작의 원리보다 요즘 잘나가는 프론트엔드 개발 환경 만들기라는 목표로 세팅 하였으나 점점 처음부터 차근 차근 만지면서, 내가 이걸 몰랐구나 이게 이런 뜻이었구나 새삼 느끼게 되었습니다. webpack 에 대한 설명은 이미 많이 있으니 이번에는 babel 에 대해서 글을 적어보도록 하겠습니다. babel 이란? 먼저 공식 사이트 소개를 가져오자면 아래와 같습니다. Babel is a JavaScript compiler. 그렇습니다. 바로 자바스크립트 컴파일러 입니다. 왜 인터프리터 언어에...
javascript webpack babel polyfill esnext typescript
q_lazzarus's profile imageq_lazzarus
2020-02-12 21:56
-
php 로 IntegerArray 구현하기
기본적으로 PHP 의 배열은 일반적인 ArrayList 구현이 아니라, Hash Table 입니다. 그러다보니 php 개발자들은 배열을 배열처럼 쓰지 않고 Hash Table 처럼 이용하는 분들이 많습니다. (나쁜거 아니에요!) $a = ['q_lazzarus' => '킹왕짱']; echo $a['q_lazzarus']; 다시 기초로 돌아가자면, array 는 동일한 자료구조의 반복 입니다. 메모리 단위에서 생각해보면 동일한 크기의 방이 주루룩 있는 구조이죠. !! 그렇다면, string 하나에 integer 몰빵해서 넣으면 되자너? 구현해보자 ! 5개의 원소가 있는 배열이 있다고 가정하고 데이터를 읽는 간단한 함수를 만들어 보겠습니다. function array_get($i)...
q_lazzarus's profile imageq_lazzarus
2019-11-27 23:52
-
mobx를 이용한 flutter 상태 관리
들어가며 상태 관리란 무엇일까요? 위키 설명을 따르자면 텍스트 필드 같은 여러개의 UI 컨트롤의 상태를 관리하는 것을 의미합니다. 예를 들자면, 회원 가입창에 이메일이 유효하면 전송 버튼이 활성화되고 유효하지 않으면 단추가 비활성화되는것 같은 상황은 상태에 따른 UI 컨트롤이 관리되는 경우입니다. 그래서 뭐가 다른건데? 사실 이래선 기존이랑 뭐가 다른지 알 수가 없습니다. 여기서는 flutter 를 예를 들어보도록 하겠습니다. flutter의 구성은 widget 들의 조합입니다. 최상위 root widget 에서 하위 widget 을 포함하는 전형적인 tree 구조를 가집니다. 어디선가 비슷하죠? react...
flutter dart mobx state reactive android ios iphone google hybrid
q_lazzarus's profile imageq_lazzarus
2019-09-05 00:00
-
axios와 vue를 이용한 분할 업로드
들어가며 파일 업로드 구현이야 많이들 해보셨겠지만 용량이 커진다면? 생각보다 신경쓸게 많아집니다. 분할 업로드를 구현했을 때 얻을 수 있는 이점들은 생각보다 꽤 많습니다. 가령… 낮은 서버 대기 시간 느린 클라이언트에게도 축복을 또한 멋진 업로드 매니저도 구현이 가능하구요 오늘은 axios 라이브러리를 활용하여 resumablejs 라이브러리 메뉴얼을 참고하여 분할 업로드 기능을 구현해보도록 하겠습니다. 원리 원리는 정말 간단합니다. 파일을 그냥 짤라서 서버에 던지고, 서버에서는 파일을 합치면 됩니다. 물론 말은 쉽겠지만 코드로 이야기 하겠습니다. 백엔드 먼저 이 글의 중점은 프론트엔드이므로, 기존...
chunk-upload axios vue laravel php javascript ECMAscript
q_lazzarus's profile imageq_lazzarus
2019-06-20 10:00