ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 픽킹(picking) - 1
    GamePrograming/Direct3D 2010. 7. 13. 11:40

    이번 과제에서 화면상의 좌표를 변경하는데 있어 2D 평면이 주를 이루기 때문에

    마우스 좌표를 광선으로 변경하는 것보다 오브젝트의 좌표를 화면상의 좌표로 변경시키는

    함수를 제작했다.



     

    //-----------------------------------------------------------------------------
    // Name: D3DUtil_VecToScreen()
    // Desc: 벡터를 스크린 좌표로 변환한다
    //-----------------------------------------------------------------------------
    
    D3DXVECTOR3 D3DUtil_VecToScreen( D3DXMATRIXA16& WVP, int width, int height, D3DXVECTOR3 vec)
    {
    	D3DXVECTOR3 v;
    	
    	D3DXVec3TransformCoord(&vec, &vec, &WVP);
    
    	v.x = (-1.0f - vec.x) / (-2.0f) * width;
    	v.y = (1.0f - vec.y) / (2.0f) * height;
    	v.z = vec.z;
    
    	return v;
    }
    
    //-----------------------------------------------------------------------------
    // Name: D3DUtil_ScreenToVec()
    // Desc: 스크린 좌표를 벡터로 변환한다.
    //-----------------------------------------------------------------------------
    D3DXVECTOR3 D3DUtil_ScreenToVec( D3DXMATRIXA16& WVP, int width, int height, D3DXVECTOR3 vec)
    {
    	D3DXVECTOR3 v;
    	
    	v.x = -1.0f - (vec.x / width * (-2.0f)) ;
    	v.y = 1.0f - (vec.y / height * (2.0f)) ;
    	v.z = vec.z;
    	
    	D3DXMATRIXA16 matInverse;
    	D3DXMatrixInverse(&matInverse, NULL, &WVP);
    	D3DXVec3TransformCoord(&v, &v, &matInverse);
    
    	return v;
    }
    ​


    댓글

Designed by Tistory.