픽셀 쉐이더의 기능처럼 깊이 스텐실을 구현하려고합니다. HLSL에서 float를 unorm으로 변환
나는 정규화 된 깊이 값을 가지고 있고, 그래서처럼 SM5 InterlockedMin() 작업을 사용하기 위해 정수로 변환 할 :dnorm
는 깊이 값이다
uint d_uint = (uint)(dnorm * 4294967295);
uint d_uint_original = 0;
InterlockedMin(depthmask[c], d_uint, d_uint_original);
if (d_uint < d_uint_original) { //if true, we will have written a new depth into the mask, so write the element to the field
field[c].x = d;
field[c].yzw = i.n;
}
. 내가 RenderDoc에서 버퍼를 확인하고 쉐이더 만 나는 또한, 상수를 줄일 수 229,496,729 말을하고는 것이다 0을 기록 볼 수 있기 때문에
그러나, uint d_uint = (uint)(dnorm * 4294967295);
은 오직 내가 이것을 알고 0
에 evaulates 올바르게 쓰십시오. 그러나 2294967295로 설정하면 그렇지 않습니다.
나는 부동 소수점 양자화 문제를 극복하려고 노력하고 있지만 어떻게해야할지 모르겠다.
정수 배열에서 정규화 된 값을 인코딩하는 올바른 방법은 무엇입니까?
DX의 UNORM/SNORM에 대해 알고 있는데, 어쩌면 중단이 필요하지만 그 문서에서 어떻게 사용해야하는지, 특히 연동 기능과 함께 사용하려면 UINT로 변환해야합니다. 귀하의 경우에는