• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

분명 mesh는 1개인데 삼각형은 두개가 그려지네요?

22.06.28 22:48 작성 조회수 177

0

분명 mesh는 1개인데 삼각형은 두개가 그려지네요?

mesh의 transform을 설정해주고 render를 하는게 두번이 반복돼서 오른쪽으로 밀린게 한번 그려지고 그 다음 위로 밀린게 한번 그려지는거 같은데

그렇게 생각하려니 이해가 가지 않는것이

CMD_LIST->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

CMD_LIST->IASetVertexBuffers(0, 1, &vertexBufferView); // Slot: (0~15) 은 Instancing에 사용됨

g_Engine->GetConstantBuffer()->PushData(0, &transform, sizeof(Transform));

g_Engine->GetConstantBuffer()->PushData(1, &transform, sizeof(Transform));

CMD_LIST->DrawInstanced(vertexCount, 1, 0, 0);

부분에서 이미 버퍼의 위치를 덮어쓴거 아닌가요?

(라고 생각했습니다... PushData를 뜯어보기 전까진...)

 

PushData역시 CommandQueue에 들어가는 것이기 때문에 RenderEnd로 그려지기 시작하면서 레지스터에 버퍼의 주소값을 바꿔주는것도 포함이 되는 것이겠네요.

 

그리고 비슷한 느낌으로

mesh->Render();
	{
		mesh->SetTransform({ Vec4(0.5,0.5,0.5,0) });
		mesh->Render();
	}

이렇게 코드를 작성해봤었습니다. (Mesh의 Render가 호출 되는 부분은 이게 끝입니다.)

근데 영상에서 SetTransform을 두번 쓴 코드와는 다르게 이렇게 하니까 삼각형이 하나밖에 그려지지가 않네요...? 혹시 이런건 왜 그런건지 알 수 있을까요?

똑같이 트랜스폼 세팅되고 정점버퍼세팅됐는데...

답변 1

답변을 작성해보세요.

0

마지막 깊이 값을 w를 0으로 하지 마시고,
0 < depth < 1 사이의 값으로 해보세요.
(ex. 0.5 0.5 0.5 0.5)

나중에 렌더링 단계에서 0 < w < 1 사이의 값이 아니면 필터링 됩니다.

usaisdie님의 프로필

usaisdie

2022.06.29

제가 잘못 생각했었네요

이미 하나의 mesh에 트랜스폼을 적용시켰으니

다른 트랜스폼을 적용시키기 전 까지는 똑같은 곳에 두번 렌더링되는 것 같습니다.

강의를 들으면서 DX11을 처음 접했을 때 처럼 뭔가 폭풍이 지나가는 기분이지만 보고 또 보고 하면서 숙지해야겠습니다.

좋은 강의 감사합니다