unit uutlMcfHelper; {$mode objfpc}{$H+} interface uses ugluMatrix, ugluVector, uutlMCF, uglcLight; procedure utlWriteMatrix4f(const aSection: TutlMCFSection; const aMatrix: TgluMatrix4f); function utlReadMatrix4f(const aSection: TutlMCFSection): TgluMatrix4f; procedure utlWriteMaterial(const aSection: TutlMCFSection; const aMaterial: TglcMaterialRec); function utlReadMaterial(const aSection: TutlMCFSection): TglcMaterialRec; procedure utlWriteLight(const aSection: TutlMCFSection; const aLight: TglcLightRec); function utlReadLight(const aSection: TutlMCFSection): TglcLightRec; implementation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure utlWriteMatrix4f(const aSection: TutlMCFSection; const aMatrix: TgluMatrix4f); begin with aSection do begin SetString('AxisX', gluVector4fToStr(aMatrix[maAxisX])); SetString('AxisY', gluVector4fToStr(aMatrix[maAxisY])); SetString('AxisZ', gluVector4fToStr(aMatrix[maAxisZ])); SetString('Pos', gluVector4fToStr(aMatrix[maPos])); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function utlReadMatrix4f(const aSection: TutlMCFSection): TgluMatrix4f; begin with aSection do begin result[maAxisX] := gluStrToVector4f(GetString('AxisX', '1; 0; 0; 0;')); result[maAxisY] := gluStrToVector4f(GetString('AxisY', '0; 1; 0; 0;')); result[maAxisZ] := gluStrToVector4f(GetString('AxisZ', '0; 0; 1; 0;')); result[maPos] := gluStrToVector4f(GetString('Pos', '0; 0; 0; 1;')); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure utlWriteMaterial(const aSection: TutlMCFSection; const aMaterial: TglcMaterialRec); begin with aSection do begin SetString('Ambient', gluVector4fToStr(aMaterial.Ambient)); SetString('Diffuse', gluVector4fToStr(aMaterial.Diffuse)); SetString('Specular', gluVector4fToStr(aMaterial.Specular)); SetString('Emission', gluVector4fToStr(aMaterial.Emission)); SetFloat ('Shininess', aMaterial.Shininess); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function utlReadMaterial(const aSection: TutlMCFSection): TglcMaterialRec; begin with aSection do begin result.Ambient := gluStrToVector4f(GetString('Ambient', gluVector4fToStr(MAT_DEFAULT_AMBIENT))); result.Diffuse := gluStrToVector4f(GetString('Diffuse', gluVector4fToStr(MAT_DEFAULT_DIFFUSE))); result.Specular := gluStrToVector4f(GetString('Specular', gluVector4fToStr(MAT_DEFAULT_SPECULAR))); result.Emission := gluStrToVector4f(GetString('Emission', gluVector4fToStr(MAT_DEFAULT_EMISSION))); result.Shininess := GetFloat('Shininess', MAT_DEFAULT_SHININESS); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure utlWriteLight(const aSection: TutlMCFSection; const aLight: TglcLightRec); begin with aSection do begin SetString('Ambient', gluVector4fToStr(aLight.Ambient)); SetString('Diffuse', gluVector4fToStr(aLight.Diffuse)); SetString('Specular', gluVector4fToStr(aLight.Specular)); SetString('Position', gluVector4fToStr(aLight.Position)); SetString('SpotDirection', gluVector3fToStr(aLight.SpotDirection)); SetFloat ('SpotExponent', aLight.SpotExponent); SetFloat ('SpotCutoff', aLight.SpotCutoff); SetFloat ('ConstantAtt', aLight.ConstantAtt); SetFloat ('LinearAtt', aLight.LinearAtt); SetFloat ('QuadraticAtt', aLight.QuadraticAtt); end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function utlReadLight(const aSection: TutlMCFSection): TglcLightRec; begin with aSection do begin result.Ambient := gluStrToVector4f(GetString('Ambient', gluVector4fToStr(LIGHT_DEFAULT_AMBIENT))); result.Diffuse := gluStrToVector4f(GetString('Diffuse', gluVector4fToStr(LIGHT_DEFAULT_DIFFUSE))); result.Specular := gluStrToVector4f(GetString('Specular', gluVector4fToStr(LIGHT_DEFAULT_SPECULAR))); result.Position := gluStrToVector4f(GetString('Position', gluVector4fToStr(LIGHT_DEFAULT_POSITION))); result.SpotDirection := gluStrToVector3f(GetString('SpotDirection', gluVector3fToStr(LIGHT_DEFAULT_SPOT_DIRECTION))); result.SpotExponent := GetFloat ('SpotExponent', LIGHT_DEFAULT_SPOT_EXPONENT); result.SpotCutoff := GetFloat ('SpotCutoff', LIGHT_DEFAULT_SPOT_CUTOFF); result.ConstantAtt := GetFloat ('ConstantAtt', LIGHT_DEFAULT_CONSTANT_ATT); result.LinearAtt := GetFloat ('LinearAtt', LIGHT_DEFAULT_LINEAR_ATT); result.QuadraticAtt := GetFloat ('QuadraticAtt', LIGHT_DEFAULT_QUADRATIC_ATT); end; end; end.