프로그래밍 282

effective c++

TR1 TR1 C++ 표준 라이브러리에 새로 추가되는 기능들에 대한 명세이다. 새로 추가된 기능들은 클래스 및 함수 템플릿이 주류인데, 해시 테이블, 참조 카운팅 방식 스마트 포인터, 정규 표현식 등이다. TR1의 모든 구성요소는 tr1 네임스페이스에 들어 있고, tr1 네임스페이스는 std 네임스페이스 안에 중첩되어 있다. Boost C++ 라이브러리를 제공하는 단체로 TR1의 구성요소 대부분이 이곳에서 만들어졌다. TR외의 유익한 많은 것들을 참고할 수 있다. http://boost/org C++의 구성 방식과 규칙 C++는 다중패러다임 프로그래밍 언어로 절차적 프로그래밍을 기본으로 객체 지향, 함수식, 일반화 프로그래밍을 포함하여 메타프로그래밍 개념까지 지원한다. C++을 구성하는 하위 언어 C언어..

언리얼 내의 포인터

관리되지 않는 메모리와 관리되는 메모리 관리되지 않는 메모리는 malloc()/free() , new/delete가 있으며, 관리되는 메모리는 NewObject와 ConstructObject 사용이 있다. 또한 이들을 수동 메모리 해제를 위해 언리얼은 UObject::ConditionalBeginDestroy() 멤버 함수를 호출한다. 오브젝트 추적에 대한 용이함으로는 스마트 포인터와 TScopedPointer를 사용하여 가능하다. 언리얼 스마트 포인터 언리얼 스마트 포인터란? C++11의 스마트 포인터의 디자인을 커스텀하여 구현(implementation. SW공학 내의 구현 의미)한 것으로, C++의 스마트 포인터 라이브러리는 일반 객체를 위한 라이브러리이므로, 언리얼 오브젝트에 사용하기에..

UE5 2023.11.02

선형보간 및 폴리곤 메시

선행보간 선형 보간을 통한 매개변수 방정식을 이용하여 색상 보간으로 색을 추출할 수 있다. 그렇다면 만약 엔진 제작자가 마우스 위치에 따른 색상표를 뽑아낸다고 한다면 해당 이미지처럼 마우스 위치와 정점의 거리를 계산하여 선형보간으로 색상을 추출할 수 있다. 폴리곤 메시 저해상도의 메시는 빠르게 렌더링할 수 있지만 폴리곤의 각진 특징이 드러나기 쉽다. 반면 고해상도 메시는 처리 시간이 더 걸리지만 폴리곤의 각진 특징을 가려줄 수 있다. 정점의 개수가 많으면 해상도가 높다고 말하며, 정점이 적으면 해상도가 낮다고 말한다. 폴리곤 메시 표현은 삼각형 메시를 표현하는 것을 예로 들겠다. 이는 정점 배열로 나열하여 나타낼 수 있다. 이렇게 정점들이 저장된 배열을 정점배열이라고 한다. (vertex array) 삼..

그래픽스/OpenGL 2023.11.01

너무 만하

dx12도 정리해야하고 그래픽스 기본 원리도 정리해야하고 엔진 관련 목록도 따로 정리해야하고 언리얼 포폴도 만들어야하고 모던 c++도 정리해야하고 서버도 기본 원리는 알아야하고 그리구 자료구조와 알고리즘도 필수고 cs도 ㄱ ㅐ론만 다 읽었다구 다냐? 어림도 없지 달달 외워야한다. 그래서 책도 또 샀다. 나는 이제 프린세스 메이커 현실판이라고 생각하구 살기로했다.

며칠 쉬면서 한 생각 및 향후 공부 방향성 11월

게임 기술서 쓸 때 참고할 자료 1순위 2순위 3순위로 우선순위 분할. 1순위 11월 안에 끝낼 것 일단 적어도 언리얼 엔진을 사용한 경험이 있다고 말하기 위한 간단한 포폴을 만들기 위해서 현재 보고 있는 인강을 완강하고 언리얼 기술 ppt를 간략히 정리하자. 매일 5시간은 언리얼에 집중하자. 2순위 1) openGL ES 완독 3순위 1) C++ 마이크로 소프트 정리 - 포인터 정리 2) DLL 이론 정리 3) 구현 https://learn.microsoft.com/ko-kr/visualstudio/get-started/csharp/tutorial-wpf?view=vs-2022 C#에서 WPF를 사용하는 Hello World 앱 - Visual Studio (Windows)WPF(Windows Pres..

<memory> smart pointer

smart pointer 스마트 포인터는 헤더 파일의 std namespace에 정의된다. smart pointer는 포인터처럼 행동하는 클래스 객체이지만, 몇 가지 추가 기능을 지닌다. 이번 게시물에서는 예시를 통해 동적 메모리 대입을 관리하기 위한 스마트 포인터 템플릿에 대하여 알아볼 것이다. 가령 어떠한 함수가 원시 포인터를 사용한다고 가정하면, 마지막에 delete 구문을 빼먹었거나, 혹은 delete 구문 전에 오류가 나면 대입된 메모리가 해제되지 못한다. 지역 변수는 스택 메모리부터 삭제된다. 그래서 포인터가 차지하고 있던 메모리가 해제되고 이때, 포인터가 지시하는 메모리도 함께 해제된다면 좋을 것이다. 이러한 과정을 거치기 위해서는 포인터의 수명이 다했을 때 프로그램이 어떤 추가 조치를 취해..

volatile

volatile 란? 하드웨어에 의해 프로그램에서 수정할 수 있는 개체를 선언하는 데 사용할 수 있는 형식 한정자이다. volatile declarator; 일반적으로 volatile은 컴파일러 최적화를 제한하는 용도로 사용한다. 컴파일러는 훌륭하게 최적화하지만, volatile를 사용해서 최적화를 제한해야 하는 상황이 있다. 즉, volatile int t 구문은 변수 t의 값은 프로그램을 수행하는 어느 순간에나 외적인 요인에 의해 값이 변할 수 있음을 컴파일러에게 알려 주어, 컴파일러가 변수 t의 값을 사용할 때 주의하도록 만든다. (주로 하드웨어를 제어하는 프로그램에서 발생하는데, 변수가 특정 하드웨어의 레지스터나 포트를 가리키는 겨웅에 사용한다) 특히 volatile로 정의된 변수는 레지스터에 할..

포인터

포인터 포인터란? 포인터는 개체의 메모리 주소를 저장하는 변수이다. 포인터는 세 가지 기본 목적으로 C 및 C++에서 광범위하게 사용된다. 힙에 새 개체를 할당하려면 함수를 다른 함수에 전달하려면 배열 또는 기타 데이터 구조의 요소를 반복한다 원시포인터 원시 포인터란( = raw pointer)? 원시 포인터( = raw pointer )는 스마트 포인터와 같이 캡슐화 개체에 의해 수명이 제어되지 않는 포인터다. 원시 포인터는 즉, 값에 비포인터 변수의 주소를 할당하거나 nullptr을 할당할 수 있다. 값이 할당되지 않은 포인터는 임의 데이터가 포함이 된다. 포인터를 역참조하여 포인터가 가리키는 개체의 값을 검색하는 것 또한 가능하다. 멤버 엑세스 연산자는 개체의 멤버에 대한 엑세스를 제공한다. * 역..

HLSL 의 개요

왜 HLSL를 배우는가? 이유는 유니티 홈페이지를 구경하다가 해당 구문을 찾았다. 유니티는 왜 HLSL을 쓸까? 고민했는데 간단하다. DX를 쓰니, HLSL로 셰이더를 짠 것이다. 그럼 만약 회사에 들어가서 그래픽스에 관련된 작업을 해야할 때, HLSL을 써야할 일이 생길 수도 있다는 생각이 들었고, 게임업계 관련 채용 공고를 찾아보니 HLSL을 사용한다고 써져있었기에 배운다. 본론 게임 개발자가 되기 위해서는 특화된 여러가지 기술을 요한다. 대규모 멀티 프로그래밍, 그래픽 API, Direct3D는 렌더링 파이프라인을 사용하여 기본 요소를 그리거나 컴퓨팅 셰이더를 사용하여 병렬 작업을 수행하기 위한 하위 수준 API이다. Direct3D 12 API를 사용하려면 D3d12.h를 포함하고, D3d12.l..