Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

101 rader
5.1 KiB

  1. unit uutlMcfHelper;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. ugluMatrix, ugluVector, uutlMCF, uglcLight;
  6. procedure utlWriteMatrix4f(const aSection: TutlMCFSection; const aMatrix: TgluMatrix4f);
  7. function utlReadMatrix4f(const aSection: TutlMCFSection): TgluMatrix4f;
  8. procedure utlWriteMaterial(const aSection: TutlMCFSection; const aMaterial: TglcMaterialRec);
  9. function utlReadMaterial(const aSection: TutlMCFSection): TglcMaterialRec;
  10. procedure utlWriteLight(const aSection: TutlMCFSection; const aLight: TglcLightRec);
  11. function utlReadLight(const aSection: TutlMCFSection): TglcLightRec;
  12. implementation
  13. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  14. procedure utlWriteMatrix4f(const aSection: TutlMCFSection; const aMatrix: TgluMatrix4f);
  15. begin
  16. with aSection do begin
  17. SetString('AxisX', gluVector4fToStr(aMatrix[maAxisX]));
  18. SetString('AxisY', gluVector4fToStr(aMatrix[maAxisY]));
  19. SetString('AxisZ', gluVector4fToStr(aMatrix[maAxisZ]));
  20. SetString('Pos', gluVector4fToStr(aMatrix[maPos]));
  21. end;
  22. end;
  23. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. function utlReadMatrix4f(const aSection: TutlMCFSection): TgluMatrix4f;
  25. begin
  26. with aSection do begin
  27. result[maAxisX] := gluStrToVector4f(GetString('AxisX', '1; 0; 0; 0;'));
  28. result[maAxisY] := gluStrToVector4f(GetString('AxisY', '0; 1; 0; 0;'));
  29. result[maAxisZ] := gluStrToVector4f(GetString('AxisZ', '0; 0; 1; 0;'));
  30. result[maPos] := gluStrToVector4f(GetString('Pos', '0; 0; 0; 1;'));
  31. end;
  32. end;
  33. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  34. procedure utlWriteMaterial(const aSection: TutlMCFSection; const aMaterial: TglcMaterialRec);
  35. begin
  36. with aSection do begin
  37. SetString('Ambient', gluVector4fToStr(aMaterial.Ambient));
  38. SetString('Diffuse', gluVector4fToStr(aMaterial.Diffuse));
  39. SetString('Specular', gluVector4fToStr(aMaterial.Specular));
  40. SetString('Emission', gluVector4fToStr(aMaterial.Emission));
  41. SetFloat ('Shininess', aMaterial.Shininess);
  42. end;
  43. end;
  44. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. function utlReadMaterial(const aSection: TutlMCFSection): TglcMaterialRec;
  46. begin
  47. with aSection do begin
  48. result.Ambient := gluStrToVector4f(GetString('Ambient', gluVector4fToStr(MAT_DEFAULT_AMBIENT)));
  49. result.Diffuse := gluStrToVector4f(GetString('Diffuse', gluVector4fToStr(MAT_DEFAULT_DIFFUSE)));
  50. result.Specular := gluStrToVector4f(GetString('Specular', gluVector4fToStr(MAT_DEFAULT_SPECULAR)));
  51. result.Emission := gluStrToVector4f(GetString('Emission', gluVector4fToStr(MAT_DEFAULT_EMISSION)));
  52. result.Shininess := GetFloat('Shininess', MAT_DEFAULT_SHININESS);
  53. end;
  54. end;
  55. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  56. procedure utlWriteLight(const aSection: TutlMCFSection; const aLight: TglcLightRec);
  57. begin
  58. with aSection do begin
  59. SetString('Ambient', gluVector4fToStr(aLight.Ambient));
  60. SetString('Diffuse', gluVector4fToStr(aLight.Diffuse));
  61. SetString('Specular', gluVector4fToStr(aLight.Specular));
  62. SetString('Position', gluVector4fToStr(aLight.Position));
  63. SetString('SpotDirection', gluVector3fToStr(aLight.SpotDirection));
  64. SetFloat ('SpotExponent', aLight.SpotExponent);
  65. SetFloat ('SpotCutoff', aLight.SpotCutoff);
  66. SetFloat ('ConstantAtt', aLight.ConstantAtt);
  67. SetFloat ('LinearAtt', aLight.LinearAtt);
  68. SetFloat ('QuadraticAtt', aLight.QuadraticAtt);
  69. end;
  70. end;
  71. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  72. function utlReadLight(const aSection: TutlMCFSection): TglcLightRec;
  73. begin
  74. with aSection do begin
  75. result.Ambient := gluStrToVector4f(GetString('Ambient', gluVector4fToStr(LIGHT_DEFAULT_AMBIENT)));
  76. result.Diffuse := gluStrToVector4f(GetString('Diffuse', gluVector4fToStr(LIGHT_DEFAULT_DIFFUSE)));
  77. result.Specular := gluStrToVector4f(GetString('Specular', gluVector4fToStr(LIGHT_DEFAULT_SPECULAR)));
  78. result.Position := gluStrToVector4f(GetString('Position', gluVector4fToStr(LIGHT_DEFAULT_POSITION)));
  79. result.SpotDirection := gluStrToVector3f(GetString('SpotDirection', gluVector3fToStr(LIGHT_DEFAULT_SPOT_DIRECTION)));
  80. result.SpotExponent := GetFloat ('SpotExponent', LIGHT_DEFAULT_SPOT_EXPONENT);
  81. result.SpotCutoff := GetFloat ('SpotCutoff', LIGHT_DEFAULT_SPOT_CUTOFF);
  82. result.ConstantAtt := GetFloat ('ConstantAtt', LIGHT_DEFAULT_CONSTANT_ATT);
  83. result.LinearAtt := GetFloat ('LinearAtt', LIGHT_DEFAULT_LINEAR_ATT);
  84. result.QuadraticAtt := GetFloat ('QuadraticAtt', LIGHT_DEFAULT_QUADRATIC_ATT);
  85. end;
  86. end;
  87. end.