fork download
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. inline float saturate(float a) {
  6. return min(max(a, 0.0f), 1.0f);
  7. }
  8.  
  9. inline uint32_t MakeCookTorranceMaterial(float roughness, float fresnel, float specular) {
  10. return uint32_t(saturate(roughness) * 1023.0f) |
  11. (uint32_t(saturate(fresnel) * 1023.0f) << 10) |
  12. (uint32_t(saturate(specular) * 1023.0f) << 20);
  13. }
  14.  
  15. inline float GetCookTorranceRoughness(uint32_t material) {
  16. return float(0x3FF & material) / 1023.0f;
  17. }
  18.  
  19. inline float GetCookTorranceFresnel(uint32_t material) {
  20. return float(0x3FF &(material >> 10)) / 1023.0f;
  21. }
  22.  
  23. inline float GetCookTorranceSpecular(uint32_t material) {
  24. return float(0x3FF & (material >> 20)) / 1023.0f;
  25. }
  26.  
  27. int main() {
  28. // your code goes here
  29.  
  30. auto m = MakeCookTorranceMaterial(0.35, 0.5, 1);
  31.  
  32. cout << GetCookTorranceRoughness(m) << endl;
  33. cout << GetCookTorranceFresnel(m) << endl;
  34. cout << GetCookTorranceSpecular(m) << endl;
  35.  
  36. return 0;
  37. }
Success #stdin #stdout 0s 4396KB
stdin
Standard input is empty
stdout
0.349951
0.499511
1