프로그래밍 공부

프로그래밍 700

카테고리 설명
  • 함수포인터 함수또한 포인터 처럼 사용할 수 있는데, 이는 함수 자체에 주소값이 존재하고. 어떠한 함수를 호출할 때. 그 함수의 주소값을 가져와서 사용하기 때문이다. #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 ..

  • Frustum 기법 또는 절두체 컬링(Frustum Culling)방식 이라고 하기도 한다. 3차원 월드를 대상으로 모든 대상을 Render한다고 하였을 때. 사용하는 View인 메인 카메라에 보이지 않는 다른 객체를 전부 렌더 하는것은 비효율적인 방법이다. 이러한 렌더방식을 최적화 하기 위해. 뷰포트 외의 모든 항목을 렌더링하지 않는 방식을 이야기 한다. 카메라의 시야를 절두체라고 하는 피라미드모양이라고 생각 했을 때. 피라미드의 각 면을 경계선이라고 생각하고. 각 면마다 평면방정식을 사용하여 위치한 Obejct의 위치좌표가 해당 면보다 위에 있다면 +로, 해당 면보다 밑에 있다면 -로 위치할것이다. World기준으로 선분을 세우는것 이 아닌 각 Local면 기준으로 xyz축을 세워서 해당 xyz축으로..

  • 평면방정식은 3차원 공간에서 평면을 표현하였을 때. 각 점끼리의 상호작용에 의해 어떠한 결과가 유도되는. 관계를 의미한다. 짧게 설명하자면. 어떠한 점 n개(3개이상)으로 이루어진 평면 내에 어떠한 점 한개가 위치할 때. 해당점 P(x, y, z)는 Ax + By + Cz - D = 0을 만족한다. 를 이야기한다. 여기서 A와 B와 C는 법선벡터를 의미한다. 예를들어 법선벡터가 (1,0,0)이라면, x축에 수직인 평면을 의미한다. D는 평면이 원점으로부터 얼마나 떨어져있는가를 나타내난 값 이다. 이러한 값들을 활용해서 다양한 정보를 얻어낼 수 있는데, 예를들어 3D월드상에서 vertex와 면 두개가 접촉하였다고 가정해보자. 여기서 우리가 접촉시킨 물체가 구체이고. 접촉점의 높이를 알고싶다고 해보자. 그러..

  • 우선 Block위에 올라섰을 때. Player의 위치값에 대해 참조받아 position을 바꾸어야 한다. 그전에 위에 올라설 Block을 만들어주도록 하자. Block class Block : public BoxCollider { public: Block(string name); ~Block(); void Update(); void Render(); void GUIRender(); Vector3 GetDirection(Vector3 point); private: Model* model; }; #include "Framework.h" Block::Block(string name) { SetTag(name + "Collider"); model = new Model(name); model->SetParent(..