프로그래밍 공부

2023/11 34

  • 저번에 만들었던 인벤토리를 조금 수정해서 상점UI를 만들어보자. 함수포인터를 응용한 디자인 패턴중 하나가 옵저버 패턴이 있는데, 이 방법을 사용해서 상점 UI를 구현할것이다. 전에 만들었던 인벤토리 형태는, Button이 전역으로 설정된 mouseBag객체에 데이터를 보내주는 형태로 되어있다. 이걸 기반으로, 상점과 인벤토리의 차이점을 짚어보자. 상점 인벤토리 구매와 판매가 이루어져야한다. 보관만 하면된다. 구매하지 않은 상품은 가져가서는 안된다. 아이템은 보관만 하고 언제든 가져갈 수 있다. 아이템의 가격을 참조해서 전체 가격을 제공해야한다. 아이템의 가격은 상관없이 데이터를 저장만 하면된다. 판매할 상품과 구매할 상품을 구분해야한다. 구분할 필요가 없다. 위와같은 차이점이 나타남을 정리함으로써 알 수..

  • 한 객체의 상태가 변할 때, 그 객체에 의존하는 다른 객체들이 자동으로 알림을 받아. 상태에 대한 처리를 할 수 있도록. 객체간의 결합을 낮추는 방식이다. 전역변수로 함수포인터 배열을 생성해서. 관리하는 형태를 말한다. #pragma once class Observer : public Singleton { private: friend class Singleton; Observer() = default; ~Observer() = default; public: void AddEvent(string key, Event event); void AddParamEvent(string key, ParamEvent paramEvent); void AddIntParamEvent(string key, IntParamEve..

  • 함수포인터를 활용한 Button을 사용해 인벤토리를 구축해보자. 먼저. Button을 설계해보자. Button #pragma once // Quad 클래스를 상속하는 Button 클래스를 정의합니다. class Button : public Quad { protected: enum State { // 버튼의 상태를 정의한 열거형입니다. // NONE: 기본 상태 // DOWN: 버튼이 눌렸을 때의 상태 // OVER: 마우스 포인터가 버튼 위에 있을 때의 상태 NONE, DOWN, OVER }; // 각 버튼 상태에 대한 색상을 정의한 상수 멤버 변수입니다. const Float4 NONE_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }; // 기본 상태의 색상 (흰색) const Float..

  • 함수포인터 함수또한 포인터 처럼 사용할 수 있는데, 이는 함수 자체에 주소값이 존재하고. 어떠한 함수를 호출할 때. 그 함수의 주소값을 가져와서 사용하기 때문이다. #include #include using namespace std; // 전방선언 // 함수는 메모리를 가진다. void Attack(); void Damage(); class Player { public: static void Attack() { cout

  • UI는 3D화면에 2DObject를 그리는 행위이다. 그렇다면, UI를 그릴때. 중첩되서 표시되는경우 어떻게 해야할까. 보통은 z값을 0.0001정도씩 나누어서 표시하여 UI의 겹침을 막을 수 있다. 그러나, Render시. Object의 렌더순서에 따라 UI의 깊이를 나누어서 더 쉽고 간단하게 출력해줄 수 있다. DepthStencillState DirectX에서는 데이터를 출력할 때 깊이값을 변경하여. 2D객체가 출력될 때. 출력순서에 따라 깊이buffer를 0~1사이로 설정하여 어떤 객체가 덮어씌워지고 덮어씌워지지 않을지 선택하여 출력이 가능하다. 깊이 스텐실 버퍼의 순서는 대략 깊이버퍼 설정 -> 깊이스텐실 테스트 -> 테스트 결과 로 나타나는데. 각각은 다음과 같다. 깊이 버퍼 깊이 버퍼는 화면..

  • 폰트 출력과 최적화에 대해 살펴보자. Frustum기법 을 사용하면 간단하게 최적화를 구현할 수 있다. 먼저. 카메라의 각 면에대해 해당 객체가 면의 안쪽에 위치하는지를 체크한다. void Camera::Frustum() { Float4x4 VP; XMStoreFloat4x4(&VP, view * projection); // 월드상의 절도체 정보 // Left a = VP._14 + VP._11; b = VP._24 + VP._21; c = VP._34 + VP._31; d = VP._44 + VP._41; planes[0] = XMVectorSet(a, b, c, d); // Right a = VP._14 - VP._11; b = VP._24 - VP._21; c = VP._34 - VP._31; d ..