블로그는 나의 힘!
[ Programing ]/DirtectX92009. 12. 24. 00:30

[텍스쳐 생성]    D3DXCreateTextureFromFileExA();    D3DXCreateTextureFromFileA();
==================================================================================== 
CHAR*                             g_szReel = "./Bin/Reel.tgr";
LPDIRECT3DTEXTURE9    pTextures = NULL;
 
// 유저가 설정해 주는 생성
D3DXCreateTextureFromFileExA( pd3dDevice, g_szReel, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 
                                                 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 
                                                 D3DCOLOR_ARGB(1, 0, 0, 0), NULL, NULL, &pTextures );
 
- POOL
  D3DPOOL_MANAGED 시스템 메모리에 텍스쳐 생성. 디바이스 리소스 분실시 메니징
  D3DPOOL_DEFAULT   비디오 메모리에 텍스쳐 적재.
 
// 일반적인 생성
D3DXCreateTextureFromFileA( pd3dDevice, g_szReel, &pTextures );




- D3DXCreateTextureFromFileA 와 D3DXCreateTextureFromFileEX의 차이
- A 라고 뒤에 있는 것은 경로 읽어 올때 CHAR* 방식, 없으면 LPCTSTR 방식
Posted by Mister_Q
[ Programing ]/Algorithm2009. 12. 24. 00:26

[ ( fAfter -fBefore ) /fTime; ] 가속도
 
// 이전 좌표 값, 이후 좌표 값(이동 위치), 시간
const float GhostAction::_IsAcceleration( float fBefore, float fAfter, float fTime )
{  
     return ( fAfter -fBefore ) /fTime;
 
// 가속도만 계산 되어 리턴한다. 이 가속도를
fMove   = ( 지정 이동할 거리 + 세분 시간( 1초 / 60프레임 ) + 지정 속도 ) 
              +_IsAcceleration( m_fBeforeSpeed, m_fAfterSpeed, 1 );

// 계산 하면 가속도 적용 이동 처리 완료

Posted by Mister_Q
[ Programing ]/API2009. 12. 24. 00:23
[ QueryPerformanceCounter() 이용하여 GetTickCount() 보다 더 정확한 프레임 측정 2 ]

(1초.)
근데 이렇게 까지는 할 필요 없고.
보통은 다음 방법과 같이 쓴다.
float PerformanceCountPerFrame = QueryPerformanceFrequency / frameCount;
 
이게 최초에 시스템이 켜질때 초기화 되고.
이값은 변하면 안된다.
frameCount 이건 사용자가 원하는 프레임.
앞에 const 붙이는 것도 한 방편이 될거다.
그다음으로
매번 프레임을 측정하는데
 
float FrameGap = QueryPerformanceCounter(현재) - QueryPerformanceCounter(이전);
 
으로 값을 구한후
 
if( FrameGap > PerformanceCountPerFrame ) 이라면
Render를 호출후에
QueryPerformanceCounter(이전) = QueryPerformanceCounter(현재)값을 대입한다.
그게 아니라면 스킵해서 다음 측정할떄까지 대기. 
 
 
//////////////////////////////////////////////////////////////////////////////
 
 
 LARGE_INTEGER TimeBefore;    // 초기 초당 카운터 값
 LARGE_INTEGER TimeAfter;      // 초당 카운터 변화 값
 LARGE_INTEGER FrameInfor;    // 프레임 정보
 double  Time = 0;        // 초당 카운터 누적 값
 int   Count = 0;           // 카운터
 const int frame = 60;   // 초당 60 프레임 
 
 QueryPerformanceFrequency( &FrameInfor );    // 초당 정보.
 QueryPerformanceCounter( &TimeBefore );       // 초당 카운터 초기값
 
 const double PerFrame = (double)FrameInfor.QuadPart /frame;    // 초당 프레임 간격 설정.
 printf( "Test : %f \n", PerFrame );
 
 while( true )
 {
    QueryPerformanceCounter( &TimeAfter );       // 초당 현재 카운터 변화값
    Time = (double)TimeAfter.QuadPart -(double)TimeBefore.QuadPart;    // 현재값 - 이전값
 
    // 설정 프레임 간격시 호출 ( 60프레임으로 설정 했다면.  1 ~ 60 프레임 )
    if( PerFrame < Time )    
    {
       TimeBefore = TimeAfter;      // 이전값 현재값으로 갱신
       printf( "Count Frame : %d, Time : %f \n", Count++, Time );
   
       if( frame == Count ) break;   // 1초라면 종료
    }      
 }

 printf( "Time 1Second \n " );




추가 링크 : 

Posted by Mister_Q