Вот также версия для машинописного текста:
JSONTryParse(input) {
try {
//check if the string exists
if (input) {
var o = JSON.parse(input);
//validate the result too
if (o && o.constructor === Object) {
return o;
}
}
}
catch (e) {
}
return false;
};
Нет. Значения смещения и повторения по умолчанию для одного из них:
// uv repeat and offset setting priorities
// 1. color map
// 2. specular map
// 3. displacement map
// 4. normal map
// 5. bump map
// 5. roughness map
// 5. metalness map
// 6. alpha map
// 7. emissive map
В вашем случае это будут настройки landTexture
.
Обходной путь заключается в изменении ваших текстур или создайте пользовательский ShaderMaterial
.
EDIT: Исключение составляет карта света и карта окклюзии окружающего пространства, каждая из которых использует второй набор UV. Это позволяет другим текстурам быть более детальными, чем карта света / AO.
three.js r.84
Да. В последних версиях tr.js r90^
имеет API, который можно использовать для изменения поведения встроенных материалов с помощью GLSL.
Это непросто сделать, но был сделан пример:
https: // github .com / mrdoob / three.js / pull / 14174
В основном встроенные материалы основаны на шаблонах шейдеров, которые являются просто упорядоченным списком операторов #include <some_chunk>
.
Некоторые из этих «кусков» содержат некоторый код, который выглядит так
/*...*/ texture2D( foo, vUv ) /*...*/
Где foo
- alphaMap
, map
, specularMap
и т. д. Это означает что поиск текстуры выполняется на этом семплере, в интерполированном атрибуте uv. Вам все равно, что предшествует этому коду или что следует за ним (это может быть только точка с запятой ;
или маска .xy
).
Итак, что вы хотите сделать какое-то смещение или способ, которым выполняет тр.js, применить преобразование mat3.
Таким образом, GLSL должен выглядеть следующим образом
texture2D( foo, foo_transform * vUv )
Затем проблема становится поставкой шейдера эта форма. В этом примере выполняется немного грубой силы, сначала компилируя шейдер, а затем просматривая всю вещь (в противном случае вы должны знать, в каких кусках искать этот поиск текстуры).
Это гораздо лучшее решение, чем изменение текстур, и на самом деле должно быть проще, чем писать пользовательские ShaderMaterial
.
Отказ от ответственности - три на самом деле не предназначены для использования таким образом, но могут быть. Так, например, в то время как каждая карта имеет префикс somethingMap
, альбедо-карта не является, и ее просто называют map
, если это albedoMap
, регулярное выражение в этом примере было бы проще.