Add epsilon before repeating uvs for blend parser

This commit is contained in:
Lubos Lenco
2021-05-18 17:41:30 +02:00
parent 7b26bc2884
commit bbae892bc5
+14 -12
View File
@@ -18,6 +18,8 @@ import arm.data.MaterialSlot;
class ImportBlend {
static inline var eps = 1.0 / 32767;
public static function run(path: String, replaceExisting = true) {
Data.getBlob(path, function(b: Blob) {
var bl = new BlendParser(b);
@@ -84,11 +86,11 @@ class ImportBlend {
var uv2: Float32Array = null;
if (hasuv) {
uv0 = m.get("mloopuv", loopstart + totloop - 1).get("uv");
if (uv0[0] > 1.0) uv0[0] = uv0[0] - Std.int(uv0[0]);
if (uv0[1] > 1.0) uv0[1] = uv0[1] - Std.int(uv0[1]);
if (uv0[0] > 1.0 + eps) uv0[0] = uv0[0] - Std.int(uv0[0]);
if (uv0[1] > 1.0 + eps) uv0[1] = uv0[1] - Std.int(uv0[1]);
uv1 = m.get("mloopuv", loopstart).get("uv");
if (uv1[0] > 1.0) uv1[0] = uv1[0] - Std.int(uv1[0]);
if (uv1[1] > 1.0) uv1[1] = uv1[1] - Std.int(uv1[1]);
if (uv1[0] > 1.0 + eps) uv1[0] = uv1[0] - Std.int(uv1[0]);
if (uv1[1] > 1.0 + eps) uv1[1] = uv1[1] - Std.int(uv1[1]);
}
var col0r: Int = 0;
var col0g: Int = 0;
@@ -148,8 +150,8 @@ class ImportBlend {
vec1.setFrom(vec2);
if (hasuv) {
uv2 = m.get("mloopuv", loopstart + j + 1).get("uv");
if (uv2[0] > 1.0) uv2[0] = uv2[0] - Std.int(uv2[0]);
if (uv2[1] > 1.0) uv2[1] = uv2[1] - Std.int(uv2[1]);
if (uv2[0] > 1.0 + eps) uv2[0] = uv2[0] - Std.int(uv2[0]);
if (uv2[1] > 1.0 + eps) uv2[1] = uv2[1] - Std.int(uv2[1]);
texa[tri * 6 ] = Std.int(uv0[0] * 32767);
texa[tri * 6 + 1] = Std.int((1.0 - uv0[1]) * 32767);
texa[tri * 6 + 2] = Std.int(uv1[0] * 32767);
@@ -279,14 +281,14 @@ class ImportBlend {
var uv2: Float32Array = null;
if (hasuv) {
uv0 = m.get("mloopuv", va[i ]).get("uv");
if (uv0[0] > 1.0) uv0[0] = uv0[0] - Std.int(uv0[0]);
if (uv0[1] > 1.0) uv0[1] = uv0[1] - Std.int(uv0[1]);
if (uv0[0] > 1.0 + eps) uv0[0] = uv0[0] - Std.int(uv0[0]);
if (uv0[1] > 1.0 + eps) uv0[1] = uv0[1] - Std.int(uv0[1]);
uv1 = m.get("mloopuv", va[i1]).get("uv");
if (uv1[0] > 1.0) uv1[0] = uv1[0] - Std.int(uv1[0]);
if (uv1[1] > 1.0) uv1[1] = uv1[1] - Std.int(uv1[1]);
if (uv1[0] > 1.0 + eps) uv1[0] = uv1[0] - Std.int(uv1[0]);
if (uv1[1] > 1.0 + eps) uv1[1] = uv1[1] - Std.int(uv1[1]);
uv2 = m.get("mloopuv", va[i2]).get("uv");
if (uv2[0] > 1.0) uv2[0] = uv2[0] - Std.int(uv2[0]);
if (uv2[1] > 1.0) uv2[1] = uv2[1] - Std.int(uv2[1]);
if (uv2[0] > 1.0 + eps) uv2[0] = uv2[0] - Std.int(uv2[0]);
if (uv2[1] > 1.0 + eps) uv2[1] = uv2[1] - Std.int(uv2[1]);
}
var col0r: Int = 0;
var col0g: Int = 0;