three.js ridimensiona automaticamente l'immagine texture, se non è potenza di due. Nel mio caso sto usando una tela personalizzato come texture, che non è il potere di two.while ridimensionamento rende la trama non appare properly.Is Esiste un modo per disabilitare il ridimensionamento delle immagini in Three.jsCome disabilitare three.js per ridimensionare le immagini in potenza di due?
risposta
tre .js attualmente sta provando a un favore.
Poiché è open source, è possibile leggere il codice sorgente di WebGLRenderer.js e vedere che il metodo setTexture
chiama il metodo (non visibile al pubblico) uploadTexture
.
Quest'ultimo ha questo controllo:
if (textureNeedsPowerOfTwo(texture) && isPowerOfTwo(image) === false){
image = makePowerOfTwo(image);
}
che è abbastanza esplicativo stessa.
Ora potreste chiedervi cosa controlli effettivamente lo textureNeedsPowerOfTwo
. Vediamo.
function textureNeedsPowerOfTwo(texture) {
if (texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping) return true;
if (texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter) return true;
return false;
}
Se si utilizza avvolgendo per la trama coordinata diverso da morsetto o se si utilizza un filtro che non è vicina né lineare la trama viene scalata.
Se siete sorpresi da questo codice vi consiglio caldamente di di dare un'occhiata allo MDN page on using textures.
Citando
La cattura: queste texture [Non potenza di due trame] non può essere utilizzato con mipmapping e non devono "repeat" (piastrelle o in un involucro).
[...]
senza eseguire la configurazione di cui sopra, WebGL richiede che tutti i campioni di NPOT [non potenza di due] texture per fallire restituendo nere: RGBA (0,0,0,1).
Quindi, utilizzando una texture NPOT con parametri della texture non corretti darebbe il buon vecchio solido nero.
Dal Three.js è open source, è possibile modificare la copia locale e rimuovere il controllo "incriminato".
Tuttavia, un approccio migliore, più semplice e più gestibile consiste semplicemente nel ridimensionare la mappatura UV UV. Dopotutto è lì solo per questo caso d'uso.
Ben risposto. :) –