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
'🅿🆁🅾🅶🆁🅰🅼🅼🅸🅽🅶 > DɪʀᴇᴄᴛX 3D' 카테고리의 다른 글
[DirectX 3D]_04_그래픽 파이프라인_Graphics Pipeline (0) | 2022.09.07 |
---|---|
[DirectX 3D]_02_Input Files_파일넣기 (0) | 2022.09.04 |
[DirectX 3D]_01_Setting 시작하기 (0) | 2022.09.03 |