📜  p5.js textureWrap() 方法

📅  最后修改于: 2022-05-13 01:56:23.425000             🧑  作者: Mango

p5.js textureWrap() 方法

p5.js 中的textureWrap()函数用于设置全局纹理环绕模式。它可用于设置纹理超出其正常范围时的行为。它具有三种模式:

  • 夹子 mode 使纹理边缘的像素扩展到其极限。这是默认行为。
  • 重复 模式导致纹理重复平铺,直到达到限制。
  • 镜子 模式与 REPEAT 类似,但它会反转每个新图块上的纹理。

REPEAT 和 MIRROR 仅在纹理大小是 2 的幂时才起作用。更改将在下一次调用该函数之前生效。

句法:

textureWrap(wrapX, [wrapY])

参数:该函数接受上面提到的两个参数,如下所述:

  • wrapX:这是一个常数,用于设置纹理在 x 方向上的环绕模式。它可以具有 CLAMP、REPEAT 或 MIRROR 值。默认为 CLAMP 模式。
  • wrapY:这是一个常量,用于设置纹理在 y 方向上的环绕模式。它可以具有 CLAMP、REPEAT 或 MIRROR 值。它是一个可选参数。

下面的例子说明了 p5.js 中的textureWrap()函数

示例 1:使用 CLAMP 纹理包装的模式。

Javascript
let img;
  
function preload() {
  img = loadImage('images/gfg.jpg');
}
  
function setup() {
  createCanvas(300, 300, WEBGL);
    
  // Set the texture wrapping mode
  // to CLAMP
  textureWrap(CLAMP);
}
  
function draw() {
  background(0);
  
  let dX = mouseX;
  let dY = mouseY;
  
  let u = lerp(1.0, 2.0, dX);
  let v = lerp(1.0, 2.0, dY);
  
  scale(width / 2);
  
  texture(img);
  
  beginShape();
  vertex(-1, -1, 0, 0, 0);
  vertex(1, -1, 0, u, 0);
  vertex(1, 1, 0, u, v);
  
  vertex(1, 1, 0, u, v);
  vertex(-1, 1, 0, 0, v);
  vertex(-1, -1, 0, 0, 0);
    
  endShape();
}


Javascript
let img;
function preload() {
  img = loadImage('images/gfg.jpg');
}
  
function setup() {
  createCanvas(300, 300, WEBGL);
    
  // Set the texture wrapping mode
  // to MIRROR
  textureWrap(MIRROR);
}
  
function draw() {
  background(0);
  
  let dX = mouseX;
  let dY = mouseY;
  
  let u = lerp(1.0, 2.0, dX);
  let v = lerp(1.0, 2.0, dY);
  
  scale(width / 2);
  
  texture(img);
  
  beginShape();
  vertex(-1, -1, 0, 0, 0);
  vertex(1, -1, 0, u, 0);
  vertex(1, 1, 0, u, v);
  
  vertex(1, 1, 0, u, v);
  vertex(-1, 1, 0, 0, v);
  vertex(-1, -1, 0, 0, 0);
    
  endShape();
}


Javascript
let img;
function preload() {
  img = loadImage('images/gfg.jpg');
}
  
function setup() {
  createCanvas(300, 300, WEBGL);
    
  // Set the texture wrapping mode
  // to REPEAT
  textureWrap(REPEAT);
}
  
function draw() {
  background(0);
  
  let dX = mouseX;
  let dY = mouseY;
  
  let u = lerp(1.0, 2.0, dX);
  let v = lerp(1.0, 2.0, dY);
  
  scale(width / 2);
  
  texture(img);
  
  beginShape();
  vertex(-1, -1, 0, 0, 0);
  vertex(1, -1, 0, u, 0);
  vertex(1, 1, 0, u, v);
  
  vertex(1, 1, 0, u, v);
  vertex(-1, 1, 0, 0, v);
  vertex(-1, -1, 0, 0, 0);
    
  endShape();
}


输出:

示例 2:使用镜子 纹理包装的模式。

Javascript

let img;
function preload() {
  img = loadImage('images/gfg.jpg');
}
  
function setup() {
  createCanvas(300, 300, WEBGL);
    
  // Set the texture wrapping mode
  // to MIRROR
  textureWrap(MIRROR);
}
  
function draw() {
  background(0);
  
  let dX = mouseX;
  let dY = mouseY;
  
  let u = lerp(1.0, 2.0, dX);
  let v = lerp(1.0, 2.0, dY);
  
  scale(width / 2);
  
  texture(img);
  
  beginShape();
  vertex(-1, -1, 0, 0, 0);
  vertex(1, -1, 0, u, 0);
  vertex(1, 1, 0, u, v);
  
  vertex(1, 1, 0, u, v);
  vertex(-1, 1, 0, 0, v);
  vertex(-1, -1, 0, 0, 0);
    
  endShape();
}

输出:

示例 3:使用 REPEAT 纹理包装的模式。

Javascript

let img;
function preload() {
  img = loadImage('images/gfg.jpg');
}
  
function setup() {
  createCanvas(300, 300, WEBGL);
    
  // Set the texture wrapping mode
  // to REPEAT
  textureWrap(REPEAT);
}
  
function draw() {
  background(0);
  
  let dX = mouseX;
  let dY = mouseY;
  
  let u = lerp(1.0, 2.0, dX);
  let v = lerp(1.0, 2.0, dY);
  
  scale(width / 2);
  
  texture(img);
  
  beginShape();
  vertex(-1, -1, 0, 0, 0);
  vertex(1, -1, 0, u, 0);
  vertex(1, 1, 0, u, v);
  
  vertex(1, 1, 0, u, v);
  vertex(-1, 1, 0, 0, v);
  vertex(-1, -1, 0, 0, 0);
    
  endShape();
}

输出:


参考: https://p5js.org/reference/#/p5/textureWrap