프로그래밍 386

Unreal Object Handling

언리얼 오브젝트 핸들링이란? UObject 시스템의 기능에 대한 개요로,클래스, 프로퍼티, 함수에 적합한 매크로로 마킹해주면,UClass, UProperty, UFunction 으로 변한다.그러면 언리얼 엔진이 접근할 수 있어,다수의 내부적인 처리 기능을 구현할 수 있다. 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 0으로 채워진다.이러한 초기화 과정은1) 전체 클래스, 2) UProperties(GC시스템에 의해 관리되는 변수들), 3) 네이티브 멤버(C++로 선언된 일반 멤버 변수)모두를 포함한다. 이후 생성자에서 원하는 값으로 초기화할 수 있다. 즉, 이 말은자동 초기화 후에, 생성자에서 커스텀 초기화가 가능하다는 뜻이다.자동 추기화는 앞서 말했듯이UObject가 생성될 ..

UE5 2024.12.19

Windows Internals vol.1 - 프로세스 정리

.NET 프레임워크는 다음과 같은 두 개의 주요 컴포넌트로 이뤄져 있다.- 공통 언어 런타임(Common Language Runtime) 이것은 .NET을 위한 런타임 엔진이며, 공통 중간 언어(Common Intermediate Language) 명령을하부의 하드웨어 CPU 머신 언어와 가비지 컬렉터, 유형 검사, 코드 접근 보안 등의 명령으로 변환하는 JIT(just-in-time)컴파일러를 포함한다.CLR은 COM 인프로세스 서버(DLL)로 구현돼 있으며, 윈도우 API가 제공하는 다양한 기능을 사용한다.- .NET 프레임워크 클래스 라이브러리(Framework Class Library)사용자 인터페이스 서비스와 네트워킹, 데이터베이스 접근 등과 같은 클라이언트와 서버 애플리케이션이 전형적으로 필요..

윈도우 인스톨러

윈도우 인스톨러윈도우 인스톨러란, 윈도우의 소프트웨어 설치, 유지, 제거를 위한 엔진이다.이전에는 마이크로소프트 인스톨러라고 불렀다.설치 정보는 설치 꾸러미 안에 저장되며,기보노 파일 확장자 MSI 파일로도 알려져 있다.마이크로소프트는 서드 파티 제품들이 원도우 인스톨러를 기본 설치 프레임워크로 사용을 돕고 있다.롤백(되돌리기)과 버저닝(DLL hell = 윈도우 기반 프로그램에서 DLL을 사용할 경우 발생할 수 있는 복잡성을 나타내는 말이다.)과 같은중요한 기능은 실제 동작을 위한 일정한 내부 데이터베이스에 따라 달라질 수 있다.Windows Installer를 사용할 위치Windows Installer를 사용하면 Windows에서 실행되는 제품 및 애플리케이션을 효율적으로 설치하고 구성할 수 있다.설..

D3D11 애파인 변환(=아핀 변환)

이동은 선형변환이 아니다.하지만 그래픽스에서 이동과 선형 변환을 동시에표현하고 싶을 때 사용하는 것이 애파인 변환이다. 즉, 애파인 변환이란선형 변환과 이동을 하나의 행렬로 표현한 것이다. Homogeneous Coordinates란?선형 변환하고 선형 변환이 아닌 이동을 합치기 위해서 새롭게 추가가 된 개념이다.벡터 : (x,y,z,0) 포인트 : (x,y,z,1)포인트 - 포인트 = 벡터포인트 + 벡터 = 포인트변환 전 직선은 변환 후에도 직선이다.이 식을 행렬 식으로 표현하면 다음과 같다.이러한 개념을 수학적으로 간단히 나타내면 애파인의 a를 따고,선형변환을 Tau라고 했다. 애파인 변환을 식으로 나타내면 다음과 같다.이런 식으로 애파인 트랜스폼을 사용할 수 있으므로,3차원에서는 4x4 행렬을 사용..

그래픽스/DX11 2024.12.16

IP(Internet Protocol) 열기

으래 컴퓨터를 어려서부터 접한 세대이고,초딩 때 크아나, 바람의 시대 혹은 롤에서 키보드 배틀 좀 떠봤다 싶은 독자들이라면,나보다 나이 좀 많아 보이는 형아들이 너 IP따서 디도스 공격한다.라는 으름장에 맘을 졸여본 적이 있을 것이다.그렇다. 사실 필자의 얘기다. 필자는 막연하게 IP가 뭐냐고 형제에게 물어봤다.필자의 형제는 간단하게 말해서IP란, 인터넷에서 사용하는 가상의 주소라고 답해줬다.우리집에도 주소가 있듯, 컴퓨터에도 주소가 있다는 개념을 그 때 처음 알았다. 초딩 때 나를 발발 떨게했던 IP주소 딴다의 말의IP의 풀네임을 수십년이 흐른 지금에야 알게 되었다.인터넷 프로토콜 (Internet Protocaol)이다. 인터넷 프로토콜 네트워크 계층의 가장 핵심적인 프로토콜 하나를 꼽자면 단연 인터..

프로그래머스 LV.2 모음사전

해당 자릿 수 별 경우의 수는 다음과 같다."(총자릿수 - 현자릿수) * 5 + 이전 경우의 수 = 현재 자릿 수의 경우의 수" 이다.5는 예외적으로 AAAAE - AAAAI 바로 바뀌므로 서로의 변환 관계는 1이다. A는 가장 첫 번째로 나온다. 따라서 0을 더해주면 된다.E는 그 다음이므로 1 따라서 알파벳 순서대로 2,3,4 이렇게 순차적으로 바뀐다. EAIOU가 word면E가 첫번째에 나오면 781번 1번 돌았다는 것이고, A가 0번 돌았다는 뜻이다.I는 3번째 자리이니, 31번을 2번 돌았다는 의미다.O는 4번째 자리이니, 6번을 4번 돌았다는 의미이다.U는 5번째 자라이니, 1번을 5번 돌았다는 의미이다. 해당 경우의 수를 다 더해주면 872번째 단어가 된다. #include #includ..

D3D11 회전축에 대한 벡터의 회전

회전축에 대한 벡터의 회전 회전도 행렬로 표현할 수 있다.회전을 하려면 먼저 회전축을 결정해야한다.어떠한 축에 대해서 회전해야할지, 그 다음은 몇 도만큼 돌아가야할지를 결정한다. 회전은 비교적 3차원 공간보단2차원 공간에서 구현하기 쉽다. (3차원 회전을 다룰 때는 사원수(Quaternion)를 사용하게 된다.숫자 4개를 사용해서 회전을 표현하는 것이다.) 회전을 시키고자 한다면, 2차원 평면에서의 회전을 생각하면 좀더 쉽다.2D 평면에서 회전을 생각해보자.서로 다른 벡터가 필요하다는 것을 금방 알 수 있다. 회전 과정 1. 먼저 회전축 벡터(n)와 회전하고 싶은 벡터(v)를 외적 (Cross Product)를 한다. 2. 외적 값은 회전축 벡터(n)와 회전하고 싶은 벡터(v) 두 벡터에 모두에 해서 수..

그래픽스/DX11 2024.12.13

D3D11 선형 변환(Linear Transformation) - 동차성과 가법성

선형 변환에서 변환은 그래픽스에서 뭘까? 뭐가 될 수 있을까?변환이란 어떠한 함수라고 생각해보자. 그렇게 되면 위와 같은 식이 전개가 된다.그럼 이 Tau가 어떤 함수인가에 따라,Scaling이 되기도 하고, Rotation이 되기도 한다. 이 두 가지 사례를 만족하는 것이 선형 변환이다.그렇다면 선형 변환이 아닌 경우는 뭘까? 이처럼 동차성과 가법성을 만족해야만 하는 것이 선형 변환이다. 선형 변환이 아닌 경우 예를 들어 tau라는 변환이 x,y,z를 넣었을 때,x,y,z를 x^2, y^2, z^2인 경우 왜 선형 변환이 아닐까?~이 아닌 경우를 찾을 때는 그에 대한 반례를 찾으면 된다. k가 2라고 하고, 해당 식을 전개하면 다음과 같은 결과값이 나온다.1,2,3에다가 2를 각각 곱하면2,4,..

그래픽스/DX11 2024.12.12

D3D11 그래픽스 - 변환

어떤 점을 원점에 대해서 회전시키는 경우어떤 점을 원점에 대해서 회전시키는 경우에어떠한 점 (= 임의의 점) xy를 하나의 미지수 (x,y)로 표현할 수 있고,그 임의의 점을 원점(여기서 원점은(0,0)이 아닐 수도 있다.)을 기준으로 θ만큼 회전 시킨 지점을 (x',y')로 표현할 수 있다.그러한 (x',y') 지점을 구하는 식은 아래와 같다. 그럼 열벡터(Column Vector) 형태의 회전 변환을행벡터(Row Vector)형태의 회전 변환 할까?방법은 간단하다. 좌변에도 전치(Transpose)를 해주고,우변에도 전치(Transpose)를 해준다. 이 식의 전개를 글로 풀어보면 다음과 같다.좌변에 Transpose를 해주고,우변에도 통째로 Transpose를 해준다. 이 Column vector는..

그래픽스/DX11 2024.12.11

프로그램 인터페이스 예시 STD::vector

하나의 기능을 다양한 기능으로 설계하는 인터페이스 원칙이 원칙의 대표적인 예시는 std::vector이다.std::vector는주어진 인덱스에 담긴 원소를 접근하기 위한두 가지 메서드를 제공한다.경곗값을 검사하는 at()메서드를 사용해도 되고,경곗값을 검사하지는 않지만좀 더 속도가 빠른 배열 표기법을 사용해도 된다.경곗값 검사를 반드시 한다면어느 정도 오버헤드를 감수하고 at() 메서드를 사용하면 된다.이 원칙은 인터페이스를 군더더기 없이설계해야 한다는 원칙의 예외로 봐야한다.이렇게 예외를 적용하더라도나머지 부분은 반드시 군더더기 없이 잘 설계해야한다.