Hàm mapValue:
float mapValue( float inVal, float inFrom, float inTo, float outFrom, float outTo )
{
float inScale = (inFrom != inTo)
? ( ( inVal - inFrom ) / ( inTo - inFrom ) )
: 0.0f;
float outVal = outFrom + ( inScale * ( outTo - outFrom ) );
outVal = (outFrom < outTo )
? clamp( outVal, outFrom, outTo )
: clamp( outVal, outTo, outFrom );
return outVal;
}
Nó nhận một giá trị, chuyển đổi nó thành một tỷ lệ trong một phạm vi và sau đó chia tỷ lệ tương đối với một phạm vi khác. Giống như một lerp đôi.
Bạn có thể sử dụng nó để bình thường hóa công cụ:
float minDamage = 0.0f; float maxDamage = 300.0f;
float normalisedDamage = mapValue(damange, minDamage, maxDamage, 0.0f, 1.0f);
Hoặc bạn có thể chuyển đổi từ phạm vi này sang phạm vi khác:
float brakeStrength = mapValue(timeToCollision,
0.0f, 10.0f, // seconds
1.0f, 0.2f // brake values
);
Lưu ý trong ví dụ thứ hai rằng phạm vi ngoài là một thứ tự khác với phạm vi.
Nó trông không giống lắm, nhưng tôi sử dụng fella nhỏ này ở khắp mọi nơi.