ModelHandle/source/import/importerutils.js
Viktor Kovacs 3842e1afcf PNG Transparency #21
Treat materials with png texture automatically as transparent.
2021-05-11 20:43:57 +02:00

86 lines
1.9 KiB
JavaScript

OV.NameFromLine = function (line, startIndex, commentChar)
{
let name = line.substr (startIndex);
let commentStart = name.indexOf (commentChar);
if (commentStart !== -1) {
name = name.substr (0, commentStart);
}
return name.trim ();
};
OV.ParametersFromLine = function (line, commentChar)
{
if (commentChar !== null) {
let commentStart = line.indexOf (commentChar);
if (commentStart !== -1) {
line = line.substr (0, commentStart).trim ();
}
}
return line.split (/\s+/u);
};
OV.ReadLines = function (str, onLine)
{
function LineFound (line, onLine)
{
let trimmed = line.trim ();
if (trimmed.length > 0) {
onLine (trimmed);
}
}
let cursor = 0;
let next = str.indexOf ('\n', cursor);
while (next !== -1) {
LineFound (str.substr (cursor, next - cursor), onLine);
cursor = next + 1;
next = str.indexOf ('\n', cursor);
}
LineFound (str.substr (cursor), onLine);
};
OV.IsPowerOfTwo = function (x)
{
return (x & (x - 1)) === 0;
};
OV.NextPowerOfTwo = function (x)
{
if (OV.IsPowerOfTwo (x)) {
return x;
}
let npot = Math.pow (2, Math.ceil (Math.log (x) / Math.log (2)));
return parseInt (npot, 10);
};
OV.ResizeImageToPowerOfTwoSides = function (image)
{
if (OV.IsPowerOfTwo (image.width) && OV.IsPowerOfTwo (image.height)) {
return image;
}
let width = OV.NextPowerOfTwo (image.width);
let height = OV.NextPowerOfTwo (image.height);
let canvas = document.createElement ('canvas');
canvas.width = width;
canvas.height = height;
let context = canvas.getContext ('2d');
context.drawImage (image, 0, 0, width, height);
return context.getImageData (0, 0, width, height);
};
OV.UpdateMaterialTransparency = function (material)
{
material.transparent = false;
if (OV.IsLower (material.opacity, 1.0)) {
material.transparent = true;
} else if (material.diffuseMap !== null) {
let extension = OV.GetFileExtension (material.diffuseMap.name);
if (extension === 'png') {
material.transparent = true;
}
}
};