Add utility function for color conversion.

This commit is contained in:
kovacsv 2022-01-07 22:45:43 +01:00
parent 74134c94a4
commit 31f622dede
6 changed files with 30 additions and 33 deletions

View File

@ -250,14 +250,14 @@ OV.Importer3ds = class extends OV.ImporterBase
hasLinColor = true; hasLinColor = true;
} else if (chunkId === OV.CHUNK3DS.MAT_COLOR_F) { } else if (chunkId === OV.CHUNK3DS.MAT_COLOR_F) {
if (!hasLinColor) { if (!hasLinColor) {
color.r = parseInt (reader.ReadFloat32 () * 255.0, 10); color.r = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
color.g = parseInt (reader.ReadFloat32 () * 255.0, 10); color.g = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
color.b = parseInt (reader.ReadFloat32 () * 255.0, 10); color.b = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
} }
} else if (chunkId === OV.CHUNK3DS.MAT_LIN_COLOR_F) { } else if (chunkId === OV.CHUNK3DS.MAT_LIN_COLOR_F) {
color.r = parseInt (reader.ReadFloat32 () * 255.0, 10); color.r = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
color.g = parseInt (reader.ReadFloat32 () * 255.0, 10); color.g = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
color.b = parseInt (reader.ReadFloat32 () * 255.0, 10); color.b = OV.ColorComponentFromFloat (reader.ReadFloat32 ());
hasLinColor = true; hasLinColor = true;
} else { } else {
this.SkipChunk (reader, chunkLength); this.SkipChunk (reader, chunkLength);

View File

@ -39,10 +39,10 @@ OV.GltfConstants =
OV.GetGltfColor = function (color) OV.GetGltfColor = function (color)
{ {
return new OV.Color ( return OV.ColorFromFloatComponents (
parseInt (Math.round (OV.LinearToSRGB (color[0]) * 255.0), 10), OV.LinearToSRGB (color[0]),
parseInt (Math.round (OV.LinearToSRGB (color[1]) * 255.0), 10), OV.LinearToSRGB (color[1]),
parseInt (Math.round (OV.LinearToSRGB (color[2]) * 255.0), 10) OV.LinearToSRGB (color[2])
); );
}; };
@ -54,7 +54,7 @@ OV.GetGltfVertexColor = function (color, componentType)
if (componentType !== OV.GltfComponentType.FLOAT) { if (componentType !== OV.GltfComponentType.FLOAT) {
normalized /= 255.0; normalized /= 255.0;
} }
return parseInt (Math.round (OV.LinearToSRGB (normalized) * 255.0), 10); return OV.ColorComponentFromFloat (OV.LinearToSRGB (normalized));
} }
return new OV.Color ( return new OV.Color (

View File

@ -194,11 +194,7 @@ OV.ImporterIfc = class extends OV.ImporterBase
GetMaterialIndexByColor (ifcColor) GetMaterialIndexByColor (ifcColor)
{ {
const color = new OV.Color ( const color = OV.ColorFromFloatComponents (ifcColor.x, ifcColor.y, ifcColor.z);
parseInt (ifcColor.x * 255.0, 10),
parseInt (ifcColor.y * 255.0, 10),
parseInt (ifcColor.z * 255.0, 10)
);
const materialName = 'Color ' + const materialName = 'Color ' +
OV.IntegerToHexString (color.r) + OV.IntegerToHexString (color.r) +

View File

@ -193,15 +193,6 @@ OV.ImporterObj = class extends OV.ImporterBase
ProcessMaterialParameter (keyword, parameters, line) ProcessMaterialParameter (keyword, parameters, line)
{ {
function CreateColor (parameters)
{
return new OV.Color (
parseInt (parseFloat (parameters[0] * 255.0), 10),
parseInt (parseFloat (parameters[1] * 255.0), 10),
parseInt (parseFloat (parameters[2] * 255.0), 10)
);
}
function CreateTexture (keyword, line, callbacks) function CreateTexture (keyword, line, callbacks)
{ {
let texture = new OV.TextureMap (); let texture = new OV.TextureMap ();
@ -275,19 +266,19 @@ OV.ImporterObj = class extends OV.ImporterBase
if (this.currentMaterial === null || parameters.length < 3) { if (this.currentMaterial === null || parameters.length < 3) {
return true; return true;
} }
this.currentMaterial.ambient = CreateColor (parameters); this.currentMaterial.ambient = OV.ColorFromFloatComponents (parameters[0], parameters[1], parameters[2]);
return true; return true;
} else if (keyword === 'kd') { } else if (keyword === 'kd') {
if (this.currentMaterial === null || parameters.length < 3) { if (this.currentMaterial === null || parameters.length < 3) {
return true; return true;
} }
this.currentMaterial.color = CreateColor (parameters); this.currentMaterial.color = OV.ColorFromFloatComponents (parameters[0], parameters[1], parameters[2]);
return true; return true;
} else if (keyword === 'ks') { } else if (keyword === 'ks') {
if (this.currentMaterial === null || parameters.length < 3) { if (this.currentMaterial === null || parameters.length < 3) {
return true; return true;
} }
this.currentMaterial.specular = CreateColor (parameters); this.currentMaterial.specular = OV.ColorFromFloatComponents (parameters[0], parameters[1], parameters[2]);
return true; return true;
} else if (keyword === 'ns') { } else if (keyword === 'ns') {
if (this.currentMaterial === null || parameters.length < 1) { if (this.currentMaterial === null || parameters.length < 1) {

View File

@ -20,6 +20,20 @@ OV.Color = class
} }
}; };
OV.ColorComponentFromFloat = function (component)
{
return parseInt (Math.round (component * 255.0), 10);
};
OV.ColorFromFloatComponents = function (r, g, b)
{
return new OV.Color (
OV.ColorComponentFromFloat (r),
OV.ColorComponentFromFloat (g),
OV.ColorComponentFromFloat (b)
);
};
OV.SRGBToLinear = function (component) OV.SRGBToLinear = function (component)
{ {
if (component < 0.04045) { if (component < 0.04045) {

View File

@ -82,11 +82,7 @@ OV.GetShadingType = function (model)
OV.ConvertThreeColorToColor = function (threeColor) OV.ConvertThreeColorToColor = function (threeColor)
{ {
return new OV.Color ( return OV.ColorFromFloatComponents (threeColor.r, threeColor.g, threeColor.b);
parseInt (Math.round (threeColor.r * 255.0), 10),
parseInt (Math.round (threeColor.g * 255.0), 10),
parseInt (Math.round (threeColor.b * 255.0), 10)
);
}; };
OV.ConvertColorToThreeColor = function (color) OV.ConvertColorToThreeColor = function (color)