분류 전체보기 43

[C++ 20] Module

C++ 20의 module의 도입으로 빌드 시간이 줄어들었다. C++의 빌드 과정 1. 전처리 : #include, #define등 2. 컴파일 : obj파일 생성 3. 링크 : obj파일과 심볼, 등을 묶어서 실행파일을 만듦 -> 여기서 이런 기존 빌드 과정의 문제점 1. 너무 느린 빌드 속도(반복된 substitution) 같은 라이 파일도 클래스마다 들고 있으면 각각 오브젝트에 딸려들어가서 무거워진다. (중복으로 인클루드 되는 문제) 2. 매크로 (#define)의 사용을 지양하자..? 예) #define NUM 1 이렇게 한 파일에서 정의하고 다른곳에서 #define NUM 2 하면 다른데서 두 파일 다 인클루드하고 있을 때 NUM을 뭐로 쓸지 모름 3. 심볼의 중복 정의 보통 헤더에 함수를 선언..

[C++] 2024.11.13

기본 프레임워크 만들기, 외부 라이브러리 추가 방법( feat. DirectXTex)

기본 프레임워크 만들기 DirectX11을 사용하기 위한 프레임워크를 만들기 위해 몇가지 세팅을 해주었다. 데스크톱 마법사로 프로젝트를 생성하고 미리선언된헤더에 pch.h파일을 만들었다. Types.h에 사용하기 쉽도록 재정의한 자료형들을 넣어두고 - 예)DirectX에서 자주 사용하는 자료형인 배열들XMFLOAT2, XMFLOAT3을 Vec2, Vec3등으로 Struct.h에 따로 만들어 사용할 구조체들을, Values.h에 상수들을 관리할 용도로 세 헤더 파일들을 추가하였다. 또 pch.h에 자주 사용할 라이브러리들을 추가했다. *(Windows10 이후 부터 Windows Development Kit 안에 DirectX라이브러리가 있어 따로 이전처럼 추가하지 않아도 된다. 밑에는 텍스쳐를 보여주기 ..

[DirectX11] 2023.11.05

OS 요리사 비교

예전에 보고 괜찮은 비유라고 생각했는데 생각나서 두고 보려구 저장하는 운영체제를 레스토랑 운영에 비교하는 글. https://yozm.wishket.com/magazine/detail/1269/ 레스토랑에 비유해서 알아보는 운영체제 | 요즘IT 오늘은 간만에 좀 흥미로운 주제로 글을 써보고자 합니다. 바로 운영체제입니다. 그런데 이제 뜬금없이 레스토랑을 곁들인…이 주제를 선택한 이유는 지금 운영체제 수업을 듣고 있어서 그런 yozm.wishket.com

[기타] 2023.09.12

[Unreal 4] 샘플 둘러보기#2 - 일인칭(First Player)

언리얼 엔진 자체가 사실은 언리얼 토너먼트라는 FPS게임을 만들면서 발전되었기 때문에 일인칭 게임을 만드는데 가장 대표적인 템플릿이라고 볼 수있다. 언리얼 프로젝트를 FirstPlayer라는 이름으로 일인칭을 선택해 만들었다. 실행하면 기본적으로 w,a,s,d키로 움직이고 마우스로 시선을 움직이며 좌클릭시 발사하여 공이 나가고 소리와 물체에 부딪칠시 충격도 있고 반동도 있다. 기본적인 슈팅게임의 요소를 다 가지고 있다. 1. 이번엔 FirstPlayerCharacter클래스 파일부터 먼저 보자. PlayerController가 따로 없이 입력을 받는 부분이 함께 들어가있다. 생성자에서 VR게임인지 여부를 판단해 모션게임인가를 세팅도한다. // [FirstPlayer]Character.h #include ..

[Unreal] 2023.07.21

[Unreal 4] 샘플 둘러보기 - 내려보기 샘플

언리얼엔진의 장점이자 단점인 타이트하게 미리 정해져있는 구조! 이를 익히고 있으면 적응하기 빠르다 새 프로젝트>게임을 하면 이렇게 여러 템플릿 중 선택할 수 있는데 내려보기는 탑다운 구조로 디아블로 , 리니지 같이 쿼터뷰나 탑뷰로 이루어진 게임의 틀 처럼 보인다. 주로 마우스로 움직이고 싶은 위치를 찍어서 이동하게 하는데 레이캐스팅을 해서 그쪽으로 가면 되겠다는 감이 온다. 이렇게 만든 샘플을 키면 마우스 클릭한 위치로 움직이고 커서 부분에 데칼이 있는 샘플이 만들어진다. 이동하는 방법이랑 내 캐릭터에 로봇대신 진짜 캐릭터를 입히고 육면체 장애물 대신 건물을 입혀보고 AI몬스터도 배치해보자. 1. 내 캐릭터 살펴보기 내 캐릭터는 TopDownCharacter라는 이름으로 블루프린트로 만들어져 있다. 클릭..

[Unreal] 2023.07.17

TCP/IP 소켓 프로그래밍 #06 3장 소켓의 생성과 종료

[소켓의 종료] 소켓의 종료는 close함수와 shutdown함수가 있다. close함수의 인자로 생성된 소켓의 번호(socket descriptor)를 전달한다. close로는 소켓을 생성하면 생기는 송신채널과 HostA와 HostB모두에서 수신채널이 동시에 끊어지게 된다. 그런데 shutdown함수는 송신과 수신채널중 하나만 골라서 선택적으로 끊을 수 있다. 그래서 인자로 소켓에 대한 고유 번호와 어떤 채널을 닫을것인지도 보낸다. SHUT_RD, SHUTWR, SHUT_RDWR중 고르면 된다. [소켓을 이용한 자료의 송수신] 지난 시간에 소켓을 이용해 송수신을 위해 read와 write을 썼다. 자료를 수신하는 read함수는 파일을 읽는데도 쓰이지만 소켓을 통해 자료를 읽기 위해서도 동일한 방법으로 ..

[TCP,IP] 2022.05.01

CHAR/ TCHAR/ WCHAR

문자열을 표현하기 위해 사용하는 CHAR타입의 배열! 그런데 C++을 하다보면 CHAR,TCHAR,WCHAR을 혼용해서 쓸 때가 많다. 그래서 그 차이점을 비교해보려한다. 우선 아스키코드, 멀티바이트, 유니코드에 대해 먼저 보자면. 1.아스키코드(ASCII) 아스키코드는 ANSI에서 만든 미국정보교환표준부호 이다. 7비트 부호체계이며 영문 키보드로 입력할 수 있는 모든 기호들을 128개로 나타내긴 했지만 아스키코드의 모든 문자크기는 1byte로 2byte 이상의 코드를 표현할 수 없었다. 2.멀티바이트 문자 집합. 멀티바이트 문자 집합은 아스키코드(1byte)에 다른문자(2byte)등을 포함한 문자 집합이다. 그래서 한 문자가 영어일땐 1byte이며 상황에 따라 2byte이상이기도하다. 즉, 특정 문자 ..

[C++] 2022.04.21

TCP/IP 소켓 프로그래밍 실습환경 설정

졸업 후 오랜만에 TCP/IP 공부를 다시 시작하게 되었다. 목표는 '정석용의 TCP/IP 소켓 프로그래밍' 완독. 그리고 채팅서버 만들기. 오래된 책이라 절판되었기에 중고로 구했다. 학생때는 도서관에 가면 있어 봤던 책인데 사회에 나오니 도서관에 기술책에 모두 직접 구매해서 봐야한다.. 각설하고 오늘부터 주중에 1-2시간씩 투자해서 2달 맥시멈으로 완독하는게 목표이다. 오늘은 실습환경 세팅하기. 실습환경을 위해 리눅스 환경이 준비되어야한다. 윈도우를 사용하는 내 기준 방법은 1. 가상환경을 만들고 그 위에 리눅스 설치하기. 2. SSH로 리눅스 서버에 접근하기. 3. 단독으로 직접 리눅스 환경 설치하기. 이 중에 1번 가상환경을 설치하는 방법을 진행할 것이다. https://customerconnect..

[TCP,IP] 2022.03.28

널러블 타입(Nullable type,TYPE?)

C#에 존재하는 특별한 타입인 Nullable Type int? 와 같이 타입뒤에?이 있거나 ??, ??= 요런걸 보고 놀라서 찾아보고 정리했다. 무엇이냐면 그냥 Null을 가질 수 없는 타입들에게 특별히 Null을 가질수 있도록 허용하는 것이다. 1.Nullable Type C#의 Nullable Type은 Null을 값으로 가질 수 없는 데이터의 타입을 Null을 가질수 있는 타입으로 만들도록 선언해주는것이다. Null을 값으로 가질 수 없는 타입들은 대표적으로 값 타입(value type)이 있다. int, double, bool, 구조체 등의 데이터 타입이다. *클래스와 같은 참조타입(reference type)은 Null을 값으로 가질수 있으므로 따로 Nullable Type으로 만들지 않아도 ..

[C#] 2022.01.25

Modern C++ #2 스마트 포인터(smart pointer)

스마트 포인터(smart pointer)왜 필요한가?c++의 양날의 검이였던 포인터. 직접적으로 메모리를 읽거나 수정할수 있는 큰 장점 엉뚱한 메모리에도 접근할 수 있다는 치명적인 단점. 메모리 오염은 너무나 큰 일이다.가장 큰 문제: 댕글링 포인터 또 메모리를 할당한 후 해제를 안하면 메모리 부족현상이 나타나고 소유권을 이전한 상태로 해제를 안하면 누수가 일어나는 문제가 있었다. 그래서 Unmanaged인 C++에 C++11부터 스마트포인터가 도입되었다. memory 헤더파일에 있어#include 를 해줘야한다. 주시대상이 있는(예-pvp게임) Knight클래스가 있다고 해보자class Knight{public: Knight() { cout_hp -= damage; cout_..

[C++] 2021.09.19