Adventure of 빠타박스
article thumbnail
728x90
728x90
SMALL

ImGui 활용한 DirectX 11 3D를 이용한 내용입니다.
본 내용은 똑같이 사용할 수 없음을 알립니다. (참고 및 공부자료로 만들어진 내용임을 밝힙니다.)
전 과정에 대해 이해를 해야 다음 이 부분에 대한 이해를 할 수 있음을 밝힙니다

이전 자료) https://ppatabox.tistory.com/146

 

각 이미지의 해당 원본은 노션에서 작성된 내용입니다. 본 원본을 참고 하시려면 하단에

링크를 기재해 두었습니다.

늘 지혜롭게 감사로 임하시길 바랍니다. 이 블로그에 들려 주셔서 감사합니다 ^^


4장

필기

정점(Vertex)

  • 공간상에 어떤 것을 찍기 위해서 위치 만 가질 수 도 있고
  • 위치 이외에 다른 정보들을 여러가지 가질 수 있다.

선을 하나 그린다 하면. 점 과 점을 연결 해주는 것이다.

정점 하나로. 위치 표기 이외에 그리는것은 불가

그리는 것에 대한 기준이 정점 이라고 생각하면 된다.

삼각형이라면 정점이 3개가 필요할 것이다.

화면상에 좌표는 좀 다르다.

 

 

 

 

System\IExecute에 정의된 파일 (외부에서 콜할 것들은 public)

 

 

 

System\window 에서 자동으로 콜 하는 것 들

 

 

 

Initialize()

  • 프로그램이 시작될때 어떤 객체들을 생성하고 초기화하는 역할을 한다.

destroy()

  • 프로그램이 종료 될 때 자동으로 콜
  • 객체들을 삭제할 코드들이 들어감

Update()

  • 매 프레임 마다. 데이터의 이동이나 바뀌는 것들을 처리한다.

Render()

  • 실제로 그릴 것들이 render에 들어간다.

 

 

  • 멤버 변수는 거의 private에
shader = new Shader(L"01_Vertex.fx")
  • 2D에서는 hlsl 을 사용했을 것이다. effect라는 framework,, 문법은 동일 → pass와 state관리가 좀 다를 뿐이다. fx가 좀 다루기 가 편하다.

 

 

Vector3 : 3차원 좌표계 (2D공간을 표현 하지만 3차원 좌표계를 사용)

 

 

 

화면 가운데에서 , 오른쪽 끝으로 가는 라인

 

 

 

 

버퍼(BUFFER)

D3D11_BUFFER_DESC
  • 무언가를 그릴 수 있도록 CPU 데이터를 넘겨줄 수 있도록 해주는 것

 

 

 

VERTEX_BUFFER : 정점을 그리는 것

 

 

 

short를 초기화 하는 방식

ZeroMemory()
-----------or
D3D11)_SUNRESOURCE_DATA subResource = { 0 }; //간단한 것에 대한 초기화 
  • ZeroMemory로 초기화 하는 경우
    • 멤버 안에 포인터 변수가 존재 할 때
    • 일반적인 구조체들

 

 

shader = new Shader(L"01_Vertex.fx");

vertices[0].Position = Vector3(0.0f, 0.0f, 0.0f);
vertices[1].Position = Vector3(1.0f, 0.0f, 0.0f);

D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.-ByteWidth = sizeof(Vertex) * 2; //크기를 정해 두었다. 
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; //정점데이터를 그릴 것이라는 것을 알려준다. 

D3D11)_SUNRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = vertices; //정점에 데이터를 넣어주는 것(실제로 그릴 데이터의 시작주소)
 
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
}

void Vertex_Line::Destroy()
{
		SafeDelete(shader);
		SafeRelease(vertexBuffer);
}

void Vertex_Line::Upadate();
{
}

void Vertex_Line::Render();
{
		UINT stride = sizeof(Vertex);
		UINT offset = 0;

		D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
		D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST);

		shader->Draw(0, 0, 2)
}

 

 

 

 

 

 

 

I가 붙는것은 DIrectX 인터페이스

new로 할당한 것은 SafeDelete() 매크로로 지워주면된다.

I가 붙은 것은 SafeRelease()로 지워줘야한다.

 

 

 

D3D::GetDC()->IASetVertexBuffers(몇번슬롯사용, 몇개의 버퍼, 정점버퍼(2차포인터)- 현재 단항포인터(레퍼런스 붙이고), 데이터 하나의 크기, 오프셋)

= offset “얼마만큼 부터 시작할 것인가.

그냥 0번 부터 처음부터 시작해라 라는 의미로 주면 된다.

 

 

shader→Draw(0, 0, 몆개를 그릴 것인가);

 

 

 

노션

 

https://ppatabox.notion.site/4-1c45da0af2024974917b9e0073a517d2

 

4장

필기

ppatabox.notion.site

 

728x90
728x90
LIST
profile

Adventure of 빠타박스

@PPATABOX

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!