프로그래밍 공부

2023/10 45

카테고리 설명
  • Direct3D상에서의 ObjectColiision을 구현해보자. 충돌처리는 A객체와 B객채가 존재할 때, A객체와 B객체의 vertices가 겹치는 경우가 생길 경우, 충돌했다고 판정한다. 각 vertice를 검사할 수 없음으로. 최외각선 또는 지름을 기준으로 측정하게 된다. 우선 3차원상의 충돌처리를 구현 하기전, 2차원상의 충돌처리를 확인하고 3차원을 살펴보자. 원의 충돌처리 원은 충돌처리 상 가장 연산이 조금 들어가는 방법이다. 빨간색 이 A원, 초록색이 B원 이라고 할때, A->B의 스칼라값 > A반지름 + B반지름 위 항목이 true면 충돌하지 않음, false이면 충돌한다 라고 이해하면 된다. 같을경우 충돌로 처리하든 아니든 은 취향이다. 2차원상에서의 충돌처리가 이렇다면, 3차원상에서는 어..

  • DirectX에서 사용되는 3D그래픽을 2D화면에 투영하기 위한 변환행렬이다. Proejction행렬은 카메라의 시점, 시야각, 화면의 종횡비를 고려하여 3D좌표를 화면좌표로 변환하는데 사용되는데, 이러한 행렬은 원근투영, 직교투영의 두가지 유형으로 나뉜다. 원근 투영 (Perspective Projection) 3D공간의 객체를 화면에 투영할 때 원근감을 반영하는 투영방식이다. 멀리있는 객체가 작게 나타나고 가까이있는 객체가 크게 나타나는 효과를 가진다. 화면에서의 시야각(Fov)와 종횡비를 고려한다. 가까운 객체와 멀리 있는 객체는 깊이(Depth)를 고려하여 원근효과를 적용한다. DirectX에서는 D3DXatrixPerspectiveForLH 함수를 사용하여 행렬을 생성한다. D3DXatrixPe..

  • 머티리얼을 조정하면서 조정된 데이터를 TinyXML2로 저장하고, 로드해보자. TinyXml2는 데이터를 Xml형태로 내보내거나, Xml형태의 데이터를 읽어오는 C++의 라이브러리이다. 라이브러리리의 설치는 엄청 간단한데, https://github.com/leethomason/tinyxml2 GitHub - leethomason/tinyxml2: TinyXML2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other p TinyXML2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs..

  • 지금까지 작성했던 노말맵, 스펙컬맵 디퓨즈맵을 관리하는 ImGui를 작성해보자. 우선 머티리얼에서 데이터를 전부 관리함으로. Buffer를. MaterialBuffer를 따로 만들어주어야 할것이다. 전역에서 사용하는 MaterialBuffer을 작성하자. class MaterialBuffer : public ConstBuffer { public : struct Data { Float4 diffuse = { 1, 1, 1, 1 }; Float4 specular = { 1, 1, 1, 1 }; Float4 ambient = { 1, 1, 1, 1 }; float shininess = 24.0f; float hasNormalMap = 0; float padding[2]; }; public: MaterialBu..

  • 구체 Object를 생성해보자. 정20각형을 사용해 구체 Object를 생성할 수도 있고, 아니면 원을 깎아가면서 구체를 생성할 수 있다. 두가지 다 진행해보자. 원의 둘레를 돌면서 생성하기 대부분의 사람이 알고있는 원을 그려보자. 그 원의 중심을 기준으로 선을 한개 그리게되면. 중심점을 기준으로 양분해주는 선이 생길것이다. 이걸 중심선이 아니라 옆에서 바라보았을 때의 원 한개, 위에서 바라보았을 때의 원 한개로 생각해보자. 그러면 머리속으로 그려보았을 때 대강, 십자형태로 원이 두개가 겹쳐있는 모습이 떠오를것이다. 이제 이 원 두개를 계속해서 슬라이스하면서 돌려보자. 이것이 옆에서도, 위에서도 같이 생성되었다고 하면, 구체가 체크무늬를 구성한체로 생성된다고 이해하면 된다. 그림으로 그려보았다면, 이제 ..

  • 베트남의 생물정보학자인 부이투옹퐁이 만든 조명모델로, 컴퓨터가 생성한 그림을 위한 조명모델 이라는 제목으로 소개되었다. 퐁 셰이딩은 3차원 공간에서 오브젝트에 반사되는 빛의 강도를 측정할 수 있게 해주는 기술이다. 이 기술은 객체 표면의 각 픽셀에 대해 법선 벡터를 계산하게 이루어져있다. 퐁셰이딩은 다음과 같은 단계로 이루어져있다. 환경설정 빛의 위치와 색상 카메라의 위치 그리고 물체의 재질속성을 설정한다(반사율, 굴절율 등) 법선 벡터 계산 각 픽셀에 대해 법선 벡터를 계산한다. 법선 벡터는 물체의 표면에서 수직으로 향하는 벡터로. 빛이 어떻게 반사되는지를 결정한다. 빛의 강도 계산 법선 벡터와 빛의 방향을 사용하여 각 픽셀에서의 빛의 강도를 계산한다. 색상 결정 빛의 강도와 물체의 uv맵에 따라 최종..