-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
분명 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을 두번 쓴 코드와는 다르게 이렇게 하니까 삼각형이 하나밖에 그려지지가 않네요...? 혹시 이런건 왜 그런건지 알 수 있을까요?
똑같이 트랜스폼 세팅되고 정점버퍼세팅됐는데...
답변을 작성해보세요.
0
Rookiss
지식공유자2022.06.29
마지막 깊이 값을 w를 0으로 하지 마시고,
0 < depth < 1 사이의 값으로 해보세요.
(ex. 0.5 0.5 0.5 0.5)
나중에 렌더링 단계에서 0 < w < 1 사이의 값이 아니면 필터링 됩니다.
usaisdie
2022.06.29
제가 잘못 생각했었네요
이미 하나의 mesh에 트랜스폼을 적용시켰으니
다른 트랜스폼을 적용시키기 전 까지는 똑같은 곳에 두번 렌더링되는 것 같습니다.
강의를 들으면서 DX11을 처음 접했을 때 처럼 뭔가 폭풍이 지나가는 기분이지만 보고 또 보고 하면서 숙지해야겠습니다.
좋은 강의 감사합니다
답변 1