08.30

신승빈·2022년 8월 30일
0

KGCA 수업

목록 보기
32/128

#pragma comment (lib, ".lib")

작성된 기록을 개체 파일 또는 실행 파일에 추가
속성에서 library를 추가하지 않아도 추가 가능

NDC에 대하여

Direct3D의 NDC공간은 x, y축은 -1 ~ +1 사이, z축은 0 ~ +1 사이로 이 범위를 벗어나면 Display에서 제외됨

Reference : https://docs.microsoft.com/en-us/windows/win32/direct3d11/d3d10-graphics-programming-guide-rasterizer-stage-getting-started

위 링크를 확인해보면 Viewport의 경우 -1 ~ +1 사이의 x,y축을 매핑하고, z의 경우 minDepth, maxDepth가 0 ~ 1 사이임을 설명하고 있는데, z축의 클리핑 조건을 보아 Viewport이전에 NDC로 변환이 되야함을 짐작할 수 있음

Reference : https://docs.microsoft.com/ko-kr/windows/win32/direct3d11/d3d10-graphics-programming-guide-rasterizer-stage

또한 위 링크를 보면 래스터라이저 단계에서 클리핑 작업을 수행한다고 설명하고 있음

Reference : https://docs.microsoft.com/ko-kr/windows/win32/direct3d11/overviews-direct3d-11-graphics-pipeline

그래픽스 파이프라인을 보면 Rasterizer 단계는 프로그래밍 불가능한 단계로 적어도 Geometry 단계전까지 NDC로 변환작업을 수행해야 함을 짐작할 수 있음

현재 수업은 모든 정점을 미리 NDC로 변환한 후 Vertex Shader로 넘기는 작업을 수행하는데, GPGPU로 사용가능한 그래픽카드가 있음에도 굳이 CPU를 통해 모든 정점에 대해 변환 작업을 수행하는 것은 불필요하다고 판단됨

어쩌면 Rasterizer 이전 단계에서 compute Shader를 이용하여 변환 작업을 효율적으로 수행할 수도 있을 것 같음

DeviceContext::UpdateSubresource()

Reference : https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-updatesubresource

간단하게 Default Usage로 선언된 Buffer의 데이터를 수정하기위해 사용

timeGetTime()

운영체제가 시작된 후 경과된 시간을 milliseconds 단위로 반환
정밀도가 떨어져서 많이 사용하진 않음

#pragma comment(lib, "winmm.lib")
#include <windows.h>

연구사항

현재 2d를 위해 painter algorithm으로 object를 칠하는 것으로 보이는데 3d에서는 depth-stencil buffer를 사용하는 건가?
Compute Shader를 사용하지 않는다면 SIMD를 사용하는가?
모든 Object를 CPU로 연산을 수행한 후 GPU로 업데이트를 한다면 성능 손실(bandwidth, cache)이 크지 않을까?
Device를 꼭 노출한 상태로 Rendering을 수행해야 하는가?

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글