전체 글 169

220922

그래픽스 파이프라인 -> 물체 하나가 그려지는 과정 (GPU로 연산) 우선은 아래와 같이 간소하게 사용함 Input-Assenbler (IA) -> 화면에 그리기 위해서 필요한 데이터를 입력받는 단계 Vertex Shader -> 버텍스버퍼에 만들어진 정점 정보를 IA 단계가 받고, 버텍스 쉐이더에서 Rasterizer로 정점정보를 넘긴다. 정점 하나당 버텍스스테이지를 병렬로 수행한다. Rasterizer -> 받은 정점 세개를 정규화된 좌표(NDC, NormarizedDeviceCordinate)로 변환된 걸 받는다. *NDC 좌표계 -> 중심이 0,0 이고 화면의 전체 영역을 -1 ~ 1 범위로 잡은 좌표계이다. 정규화 한다는 것은 비율을 적용해서 값을 -1 ~ 1 사이의 값으로 변환하는 것이다. Z..

DirectX 11 2022.09.26

220921

스왚체인은 두 버퍼중에 현재 프론트 버퍼를 윈도우에 복사를 시킨다. 그러려면 스왚체인은 만들어질때 출력될 윈도우가 누군지 알아야 된다. -> 목적지를 알아야한다. 스왚이펙트 = DISCARD -> 이전 버퍼의 그림을 없앤다 (스왚체인을 하면 백버퍼 프론트버퍼 바뀌기 때문에) uuidof -> 클래스마다 고유한 id값 Adaptor Factory DXGIDevice 는 Dx디바이스에서 쿼리인터페이스에서 uuidof를 이용해서 값을 얻어온다. 쿼리인터페이스는 범용적인 함수이다. 앞에 자료형이 뭐냐에 따라서 그 주소를 줘야하기 때문에 두번째인자에 void 이중포인터로 받게 된다. 계층관계로 되어있어서 DXGIDevice에 getparent 하면 어댑터를 얻어낼 수 있다. 어댑터의 윗층 부모가 팩토리여서 어댑터..

DirectX 11 2022.09.26

220920

#pragma once -> 중복해서 여러번 복사하는걸 방지해주는 구문 pch -> PreCompileHeader typedef -> 이름 재정의 batch file -> 엔진 빌드할 때마다 계속 변경된 코드를 이동시켜야하는데 이걸 편하게 하기 위해서 cd(current directory) $(SolutionDir) -> 현재 디렉터리를 솔루션 디렉터리로 가라 call(실행시켜라) EngineCopy.bat -> 배치파일을 실행시켜라 xcopy /s /y /exclude:exclude_list.txt ".\ "" 안에 있는 주소에 복사해라~ level -> scene 을 의미 entity는 최상위클래스여서 다른것들이 대부분 상속받는다 랜더링하려면 그래픽카드를 제어할 수 있어야한다. 랜더링하는 방식을 gp..

DirectX 11 2022.09.22

220919

실제 실행되고 있는건 클라이언트이고, main 함수부터 출발한다. 클라이언트가 사용하는 라이브러리도 debug버전과 release버전으로 나뉘며, debug 버전일 때는 debug 버전으로 만들어진 라이브러리를 사용해야한다. 라이브러리를 가져올 때는 #pragma comment(lib, "경로") 전처리기는 컴파일보다 먼저 처리가 된다. 정적라이브러리는 export 개념이 없다. 최종 결과물이 이미 안에 들어와버리기 때문 동적라이브러리는 실제 프로그램이 실행이 될 때 dll을 로드할 때 링크를 하는데 누구는 노출을 하고 누구는 감출 것인지 정해주어야 한다. extern "c" __declspec(dllexport) => c 문법과 관련있기 때문에 c를 관용적으로 붙여준다. dll 결과물은 lib, dll..

DirectX 11 2022.09.19

220915

winAPI -> 윈도우 기반에서 게임을 만들기 위한 기능을 배우고 게임을 만듦. 윈도우에서 제공해주는 함수는 전부 다 CPU를 활용해서 연산한다. 컴퓨터에는 cpu, gpu 가 있다. cpu -> ex) 인텔 gpu (6000 ~ 10000개의 코어수)-> ex) 엔비디아 코어수로 따지면 gpu 엔비디아에서 제공해주는 언어로 c++과 거의 유사한 gpu를 제어할 수 있는 문법. https://youtu.be/ZdITviTD3VM // GPU, CPU 어떻게 작동할까 ? 보기 3D 랜더링, 3차원에는 정점(Vertex)이 존재하는데, 정점이 최소 3개가 모이면 면을 구성할 수 있다. 정점이 구성하는 면 내부에 들어오는 수 많은 픽셀들이 존재한다. 그 픽셀 하나 하나에 GPU 코어가 하나씩 붙는다. ---..

DirectX 11 2022.09.15

디자인 패턴, 정적 변수(static)

디자인 패턴 디자인패턴 : 클래스를 이용해서 구조를 설계할 때 자주 사용하는 방식을 일종의 패턴화 하여 만들어놓은 클래스 설계 패턴이다. 종류 : Builder 패턴, Abstract Factory 패턴, Factory method 패턴, prototype 패턴, Singleton 패턴 등등 ​ 싱글톤패턴 : 파일 실행시 특정 클래스가 한번만 메로리를 할당하고 메모리에 인스턴스를 만들고 사용하는 디자인 패턴이다. 아래는 싱글톤 패턴을 메크로화 시킨 것이다. 생성자와 소멸자를 private으로 지정한다면 객체를 생성할때 생성자가 자동으로 호출이 되는데 private이기 때문에 이 클래스의 외부에서는 객체 생성이 허용이 안된다. 소멸자도 마찬가지로 private이기 때문에 이 객체 외부에서 제거하려한다면 호..

C++ 문법 2022.04.15

생성자와 소멸자, 헤더 파일, cpp 파일

생성자와 소멸자 생성자와 소멸자 : 클래스에 구현되는 함수이다. 생성자 : 이 클래스를 이용해서 객채를 생성할 때, 자동으로 호출이 되는 함수이다. 클래스에 따로 없을 경우, 기본 생성자가 호출이 된다. 객체가 생성될 때 호출되기 때문에 초기화 작업을 할 때 유용하다. 소멸자 : 이 클래스를 이용해서 생성된 객체가 메모리에서 해제될 때, 자동으로 호출이 되는 함수이다. 지역변수로 선언된 변수라면 해당 코드블록이 종료될 때 호출되고, 동적할당된 변수라면 delete를 통해서 메모리에서 제거될 때 호출이 된다. 객체의 마무리 작업을 해줄 때 유용하게 사용할 수 있다. 헤더 파일 Crtl+Shift+A를 누른뒤 헤더를 클릭하고 이름을 지어주고 확인을 누르면 생성된다. 클래스버튼을 누르면 cpp파일과 h파일이 ..

C++ 문법 2022.04.15

클래스

클래스 클래스 : 구조체처럼 여러 변수를 모아두고 하나로 묶어서 사용할 수 있는 기능을 제공한다. 클래스에서는 필요한 함수들도 구현하여 멤버로 둘 수 있다. C++에서는 객체를 만들기 위한 수단으로 클래스를 제공한다. 구조체는 예전 C 버전에서는 변수만 모아두고 함수를 모아둘 수 없었다. 하지만, C++ 에서는 클래스와 마찬가지로 함수도 모아두고 사용할 수 있다. 단, 기본적인 차이점은 멤버에 접근할 때 기본적인 접근 방식에서의 차이가 있다. 구조체는 기본적으로 public으로 되어 있다. 클래스는 기본적으로 private으로 되어 있다. 객체 : C++에서 객체는 모든 변수를 객체라고 부를 수 있다. 보통 객체라고 하면 클래스를 이용해서 만들어 준 변수를 의미하는 경우가 많다. 객체지향 프로그래밍 : ..

C++ 문법 2022.04.15

파일 관련 함수 2 (fwrite, fseek, ftell, fread)

파일 관련 함수 2 fopen_s(&File, "Test.tmo", "wb") fopen_s 의 세번째 인자의 두번째 글자에 b를 넣으면 바이너리 파일을 만들 수 있다. tmo 파일의 확장자를 가진 바이너리 파일이 생성된다. fwrite 함수는 생성한 파일에 변수의 데이터, 배열, 구조체의 데이터를 넣을 수 있다. fread 함수를 사용하면 데이터를 가져올 수 있다. 1번 인자 : 읽어오고자 하는 메모리 주소 2번 인자 : 읽어오고자 하는 데이터의 타입 크기 3번 인자 : 읽어오고자 하는 데이터 개수 4번 인자 : 대상 파일 fseek 는 파일 커서의 위치를 원하는 위치로 변경해주는 함수이다. 1번 인자 : 대상 파일 2번 인자 : offset으로 3번인자에 지정된 지점으로부터 몇 바이트만큼 떨어진 곳을..

C++ 문법 2022.04.15

assert 함수, 파일 관련 함수 (fopen, fputc, fputs, fclose, fgets, feof)

assert assert함수는 ()이 0이외의 값, 즉 거짓이면 에러를 고의적으로 발생시키는 함수다. 결과를 반환타입을 정해서 return 을 이용하여 반환하는 형태를 Call By Value 라고 한다. 포인터를 이용해서 결과를 반환하는 형태를 Call By Address 라고 한다. 레퍼런스를 이용해서 결과를 반환하는 형태를 Call By Reference 라고 한다. 파일 관련 함수 1번째 인자 : 2중포인터 2번째 인자 : 파일의 경로 (상대경로, 절대경로) 3번째 인자 : Mode가 들어간다. 절대경로는 C:\abcd\eee 이런 식으로 전체 경로를 의미하고, 상대 경로는 현재 폴더로부터의 경로를 의미한다. 여기 코드에서 상대경로를 사용하면 프로젝트 파일이 있는 폴더에 파일이 만들어지게 된다. ..

C++ 문법 2022.04.15