'Direct3D'에 해당되는 글 1건

  1. 2006/10/26 Direct3D와 Floating point 연산 문제.

Direct3D를 사용하는 도중에 커다란 문제가 생기기 시작했습니다.;

부동소숫점을 사용하는 것들이 정상적으로 동작하지 않는 것이 아니겠습니까?..

가장 첫번째로 눈에 들어온 것은 TDateTimePicker의 오동작 문제였습니다..

이러한 문제가 벌어진 것이지요..

게다가 연산을 하는데 또다른 문제가 발생하기 시작했습니다.

double a = 4122008.1234;

이렇게 넣어주는데 까지는 전혀 문제가 없지만..

a += 0.1234;
요 문장이 들어가고 난 이후에는..

a의 값이 4122008.2468 이 되는 것이 아니라 4122008.25 가 되어버리더군요...

소숫점 하나하나가 중요한 연산이 되고 있는 상황에서 이 정도의 오차율에 기겁을 하고 말았습니다. -0-;;

이 문제를 해결하기 위해 a += 0.1234; 라는 코드를 한줄 한줄 넣어 찾아본 결과 CreateDevice 를 한 뒤부터 저렇게 동작을 하고 말더군요!

( DX8, DX81, DX9 모두 똑같은 문제점이 있었습니다. ;ㅁ; )

어디가 문제인지 인식하였으므로.. 이제 남은 방법은 해결하는 것 뿐이죠..

구글링을 해보니 비슷한 문제를 갖고있던 분들이 계셨나봅니다. +ㅅ+

D3DCREATE_FPU_PRESERVE 요것에 대해 나오더군요!

CreateDevice 함수의 인자중 하나인 BehaviorFlags 에 넣어주면 된다는 것이지요!

ex)

CreateDevice( D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,G_HANDLE,
       D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE,
       &d3dpp,&g_pd3dDevice) ) )

휘유~ 이제 부동소숫점 연산을 무사히 할 수 있겠군요 -0-;;

 «이전 1  다음»