분류 전체보기 23

[C++] 우리 요딴 문제는 내지 않기로 해요

C/C++은 현대에 와서 '어려운 프로그래밍 언어' 중 하나로 손꼽히는 처지가 되었습니다. 여러가지 이유가 있겠지만, 저는 감히 그 이유를 '함정에 빠지기 쉽다'고 하겠습니다. 개중에 하나는, '정의되지 않은 동작(undefined behavior, 이하 UB)'입니다. C/C++에만 존재하는 이 요상한 개념은 말 그대로 표준에서 어떻게 동작할지 정의하지 않은 동작들인데요. 그냥 컴파일러가 무슨 짓을 할 지 모르는 겁니다. 왜냐하면 정의된 게 없으니까. 무얼 하든 컴파일러 마음입니다. 비슷한 개념으로는 unspecified behavior(이하 UsB)가 있습니다. 마땅히 통용되는 번역은 없는 것으로 알고 있기에 그냥 UsB라고 하겠습니다. 이건 표준에서 어떤 동작으로 이어질 지 후보만 추려놓은 개념입니..

POCU 아카데미 COMP 2300 (어셈블리 프로그래밍) 후기

한 줄 요약수강을 망설이는 것은 시간낭비일 뿐이다. 강력하게 추천! POCU 아카데미는 어떤 곳인가?어셈블리 프로그래밍 과목에 대해 언급하기에 앞서, POCU에 대한 내용을 짧게 훑어보자. POCU는 저명한 프로그래머 '김포프'가 만든 교육기관이다. POCU에 대한 리뷰를 찾아볼 정도로 프로그래밍과 컴퓨터 공학에 관심이 있는 사람이라면, 그가 누구인지에 대해 부연설명은 불필요할 것이다.기본적으로 동영상 형태로 강의가 진행되며, 추가 비용을 결제하면 '풀코스'로 수강할 수 있다. 풀코스는 실습과 과제를 부여받고, 강사(김포프)와 조교, 해당 학기 수강생들이 모여있는 slack 대화방에 참가할 수 있다. 이 대화방에서 실습/과제에 대해 토론 및 질문을 할 수 있다.수업은 어떻게 진행되는가?잘 갖추어진 대학 ..

공부 내용 정리, Notion에서 Obsidian으로 갈아탄 이유

2021년 즈음 해서, Notion이라는 앱이 막 알려지기 시작하면서 선풍적인 인기를 끌었다. 나 또한 그 시기에 Notion에 발을 들였고, 팀 단위의 게임 개발을 진행할 때 협업 용도로 수 년간 유용하게 사용해왔다. 특히, Notion은 학생용 요금제가 있어 꽤 괜찮은 옵션을 무료로 사용할 수 있다는 장점도 있었다. 그렇게 Notion에 익숙해지자, 원래 노트 필기 혹은 Word를 통해 정리하던 공부 내용을 Notion으로 옮겨갔었다. 마크 다운 기반이라서 익숙했고, 웹 서비스인 만큼 PC와 모바일을 오가며 공부 내용을 복습하기도 편리했다. 데이터베이스 기능을 활용하여 POCU 아카데미에서 배운 내용을 정리해두고, 태그로 필터링해서 과목별로 내용을 찾아읽기도 했다. 그러나 수 년간 Notion을 써오..

소프트웨어 렌더러 만들기 - 18 (SIMD를 사용한 역제곱근)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/3f2aed191fb0b405330daf334ce697cdc54cb65b GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com시즌 213908호 '오랜만입니다'종강 직후 3개월 동안 아르바이트를 시작했다. 게임회사에서 성능 프로파일링을 담당했는데, 기본적인 툴 사용법만 익히면 반복 작업이라..

[C++] 연산자 오버로딩 시 상수/비상수 버전 간 코드 중복 줄이기

이펙티브 C++을 읽는 중에 처음보는 hack이 있어서 기록해두고자 한다. 연산자 오버로딩을 할 때 상수(const) 버전/비상수 버전을 나눠서 오버로딩할 수 있는데, 반환 타입에 const가 있냐없냐 차이일 뿐 하는 역할은 같으니 다음과 같은 방법을 통해 코드 중복을 줄일 수 있다.class TextBlock{public: const char &operator[](std::size_t position) const { ... return text[position]; } char &operator[](std::size_t position) { return const_cast( static_cast(*this)[positio..

소프트웨어 렌더러 만들기 - 17 (3D 렌더링)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/bd9fed296433cc0cfb0299d3d511b2eebba8b39b GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com (또또) 오랜만입니다와, 정말 바쁜 해였다. 졸업작품이 끝났으니 렌더러를 다시 손대보자 싶어서 자리에 앉았다. 특히, 올해 안으로 이 렌더러를 3D로 만들고 싶었기..

소프트웨어 렌더러 만들기 - 16 (삼각형 클리핑 + 버그 수정)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/1fec655e44bffcbd7eff43adea8ca4067748468f GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com(또) 오랜만입니다한 달 정도 정신없이 졸업 작품과 관련된 일을 했다. 그러다 오늘 약~간 시간이 남길래 다시 이 프로젝트에 손을 댔다. 지금은 새벽 3시 반. 피곤..

소프트웨어 렌더러 만들기 - 15 (키보드 입력)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/5f60ce091d4a69b2071bad751aeb2ca73636d833 GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com키보드 입력을 위한 함수일단 전공 수업이었던 과목에서 배운 바에 따르면 키보드 입력은 WndProc에서 WM_KEYDOWN, WM_KEYUP 같은 메시지를 통해서 ..

소프트웨어 렌더러 만들기 - 14 (텍스처링)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/b7de9ae464050e28b4a0df087a3d53d1a5eaed63 GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com stb 라이브러리png, jpg, tga 등 다양한 포맷을 이미지 라이브러리에 대해 찾아보니 stb 라이브러리 얘기가 많았고, CK렌더러도 stb를 사용하고 있다는..

소프트웨어 렌더러 만들기 - 13 (삼각형 채우기, 보간)

여기까지의 작업내용: https://github.com/hwi-middle/HimchanSoftwareRenderer/tree/4b2ed704877d380fac65cc97ae67b3457b3f060a GitHub - hwi-middle/HimchanSoftwareRenderer: C++로 구현한 소프트웨어 렌더러입니다.C++로 구현한 소프트웨어 렌더러입니다. Contribute to hwi-middle/HimchanSoftwareRenderer development by creating an account on GitHub.github.com무게중심 좌표 vs 스캔라인저번 게시물에서 삼각형의 와이어프레임을 그렸으니 이제 색칠해볼 차례다. 내가 알고있는 선에서는 무게중심 좌표와 스캔라인 방식 중 어떻게 구..