2017-06-15 3 views
0

Actuellement, il y a 3 modes d'emballage en Three.js:Three.js: faire texture zéro en dehors des limites

THREE.RepeatWrapping 
THREE.ClampToEdgeWrapping 
THREE.MirroredRepeatWrapping 

Exemple:

var texture = new THREE.TextureLoader().load("textures/water.jpg"); 
texture.wrapS = THREE.RepeatWrapping; 
texture.wrapT = THREE.RepeatWrapping; 

J'utilise des textures dans les shaders à faire le calcul GPGPU et pour mon but je voudrais que la texture soit zéro en dehors de ses limites. Si vous utilisez par exemple ClampToEdge, la recherche de valeurs en dehors des limites de texture donnera la couleur du pixel le plus proche qui se trouve à l'intérieur des limites. Chercher une valeur aux coordonnées (1.3, .5) donnera la couleur à (1., .5) puisque 1.3 est trop grand pour les coordonnées de texture

Donc je veux que cela donne zéro en dehors des limites, ou si ça ce n'est pas possible Je veux être en mesure de régler continuellement le bord à zéro. Quelle est la meilleure façon de procéder?

+2

je peux être malentendu, mais je ne sais pas déjà, il est hors des limites à 1.3 et peut alors tester simplement si elle est dans les limites et le retour/set 0 sinon? – 2pha

Répondre

2

Dans shader vérifier les coordonnées de texture

vec4 value = vec4(0); 
if (texcoord.x >= 0. || texcoord.x <= 1. ||  
    texcoord.y >= 0. || texcoord.y <= 1.) 
    value = texture2D(someSampler, texcoord); 
}