Поиск JavaScript и замена

Возможно, вы не хотите, чтобы THREE.js уменьшал до вашего изображения, потому что вы теряли разрешение, поэтому вы хотите увеличить его до следующего ^ 2. У вас есть два варианта:

  1. Вы можете увеличить изображение и экспортировать его с разрешением ^ 2 2048 x 1024 в вашем любимом фоторедакторе.

  2. Вы можете динамически генерировать 2048 x 1024 холст, рисовать изображение на нем в увеличенном масштабе и использовать этот холст в качестве источника текстуры:

    var imgURL = "path/to/whatever.jpg";
    
    // Create image element
    const image = document.createElement('img');
    image.src = imgURL;
    
    // Once image is loaded
    image.onload = () => {
        // Create canvas, size it to ^2 dimensions
        var canvas = document.createElement('canvas');
        canvas.width = 2048;
        canvas.height = 1024;
    
        // Draw image on canvas, scaled to fit
        var ctx = canvas.getContext('2d');
        var ctx.drawImage(image, 0, 0, 2048, 1024);
    
        // Create texture
        var texture = new THREE.Texture(canvas);
    };
    

Тогда вы можете присвоить эту переменную texture любому материалу, который вы хотите, и Three.js не будет жаловаться.

Редактировать:

Если вы хотите избежать изменения размера текстуры, вы можете просто изменить texture.minFilter на THREE.NearestFilter или THREE.LinearFilter, и движок не будет предупреждать вас. Проблема заключается в том, что ваши текстуры могут выглядеть зернистыми или иметь псевдонимы при уменьшении, так как они не будут иметь Mipmapped

. Это может быть желаемым результатом или плохим в зависимости от вашего проекта. Вы можете увидеть результаты использования NearestFilter в этом примере: https://threejs.org/examples/?q=filter#webgl_materials_texture_filters

7
задан Slartibartfast 4 February 2009 в 17:26
поделиться

2 ответа

MDC утверждает, что можно сделать просто что:

function styleHyphenFormat(propertyName)
{
  function upperToHyphenLower(match)
  {
    return '-' + match.toLowerCase();
  }
  return propertyName.replace(/[A-Z]/, upperToHyphenLower);
}

Или более в общем:

myString.replace(/mypattern/g, function(match){
    return "Some function of match";
});
6
ответ дан 6 December 2019 в 21:20
поделиться

Просто опустите аргумент, т.е. используйте это:

myString.replace(/mypattern/g, f);

Вот пример: http://ejohn.org/blog/search-and-dont-replace/

6
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: