저는 수학 라이브러리가없는 플랫폼을 개발 중이므로 직접 도구를 만들어야합니다. 분수를 얻는 현재의 방법은 부동 소수점을 고정 소수점으로 변환하고 (float) 0xFFFF로 곱하고 int로 캐스트 한 다음 하위 부분 만 가져옵니다 (0xFFFF가있는 마스크). 다시 float로 변환합니다.modf()를 사용하지 않고 float의 소수 부분 얻기
그러나 부정확하게 나를 죽이고 있습니다. 내 Frac() 및 InvFrac() 함수를 사용하여 앤티 앨리어싱 된 선을 그립니다. modf
을 사용하면 완벽하게 부드러운 선을 얻습니다. 내 자신의 방법으로 픽셀 정밀도 손실로 인해 주위를 시작 뛰어. 사전에
const float fp_amount = (float)(0xFFFF);
const float fp_amount_inv = 1.f/fp_amount;
inline float Frac(float a_X)
{
return ((int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv;
}
inline float Frac(float a_X)
{
return (0xFFFF - (int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv;
}
감사 :
이 내 코드입니다!
fp_amount가 0xFFFF가 아닌 0x10000일까요? –
거룩한 쓰레기. 그것을 받아 들일 수 있도록 대답 해주세요! 방금 내 전체 정확도 문제를 해결했습니다! – knight666