示例#1
0
static inline void DecodeVector(SendProp const *pProp, bf_read *pIn, float *v)
{
	v[0] = DecodeFloat(pProp, pIn);
	v[1] = DecodeFloat(pProp, pIn);

	// Don't read in the third component for normals
	if ((pProp->GetFlags() & SPROP_NORMAL) == 0)
	{
		v[2] = DecodeFloat(pProp, pIn);
	}
	else
	{
		int signbit = pIn->ReadOneBit();

		float v0v0v1v1 = v[0] * v[0] +
			v[1] * v[1];
		if (v0v0v1v1 < 1.0f)
			v[2] = sqrtf( 1.0f - v0v0v1v1 );
		else
			v[2] = 0.0f;

		if (signbit)
			v[2] *= -1.0f;
	}
}
示例#2
0
static inline void DecodeQuaternion(SendProp const *pProp, bf_read *pIn, float *v)
{
	v[0] = DecodeFloat(pProp, pIn);
	v[1] = DecodeFloat(pProp, pIn);
	v[2] = DecodeFloat(pProp, pIn);
	v[3] = DecodeFloat(pProp, pIn);
}
示例#3
0
void Float_Decode( DecodeInfo *pInfo )
{
	pInfo->m_Value.m_Float = DecodeFloat(pInfo->m_pProp, pInfo->m_pIn);

	if ( pInfo->m_pRecvProp )
		pInfo->m_pRecvProp->GetProxyFn()( pInfo, pInfo->m_pStruct, pInfo->m_pData );
}
示例#4
0
/////////////////////////////////////////////////////////////////////////////////////////////
// Sensor Display Info
// HID Type: Get Feature
// HID Packet Length: 56
/////////////////////////////////////////////////////////////////////////////////////////////
BOOLEAN getSensorInfo( Device *dev )
{
    UInt8 Buffer[56];
    //UInt16 CommandId;
    int res;

    Buffer[0] = 0x9;  // DisplayInfo
    res = hid_get_feature_report(dev->hidapi_dev, Buffer, 56 );
    if (res < 0) 
    {
        return FALSE;
    } 
    else 
    {
        dev->sensorInfo.DistortionType          = Buffer[3];
        dev->sensorInfo.HResolution             = DecodeUInt16(Buffer+4);
        dev->sensorInfo.VResolution             = DecodeUInt16(Buffer+6);
        dev->sensorInfo.HScreenSize             = DecodeUInt32(Buffer+8) *  (1/1000000.f);
        dev->sensorInfo.VScreenSize             = DecodeUInt32(Buffer+12) * (1/1000000.f);
        dev->sensorInfo.VCenter                 = DecodeUInt32(Buffer+16) * (1/1000000.f);
        dev->sensorInfo.LensSeparation          = DecodeUInt32(Buffer+20) * (1/1000000.f);
        dev->sensorInfo.EyeToScreenDistance[0]  = DecodeUInt32(Buffer+24) * (1/1000000.f);
        dev->sensorInfo.EyeToScreenDistance[1]  = DecodeUInt32(Buffer+28) * (1/1000000.f);
        dev->sensorInfo.DistortionK[0]          = DecodeFloat(Buffer+32);
        dev->sensorInfo.DistortionK[1]          = DecodeFloat(Buffer+36);
        dev->sensorInfo.DistortionK[2]          = DecodeFloat(Buffer+40);
        dev->sensorInfo.DistortionK[3]          = DecodeFloat(Buffer+44);
        dev->sensorInfo.DistortionK[4]          = DecodeFloat(Buffer+48);
        dev->sensorInfo.DistortionK[5]          = DecodeFloat(Buffer+52);

#if 0
        {
        int i;
        printf ("\nSensor Info:\n");
		for (i = 0; i < res; i++)
			printf("%hhx ", Buffer[i]);
		puts("\n");

        printf ("\nR: %d x %d", dev->sensorInfo.HResolution, dev->sensorInfo.VResolution );
        printf ("\tS: %f x %f\n", dev->sensorInfo.HScreenSize, dev->sensorInfo.VScreenSize );
        }
#endif
    }
    return TRUE;
}
示例#5
0
bool Float_IsEncodedZero( const SendProp *pProp, bf_read *pIn )
{
	return DecodeFloat( pProp, pIn ) == 0.0f;
}