参考 textureMode()

textureMode()

更改应用于自定义形状时使用的纹理坐标系统。

为了使 texture() 功能有效,一个形状需要一种方法来将其表面的点映射到图像中的像素上。内置形状如 rect()box() 已经根据它们的顶点具有这些纹理映射。使用 vertex() 创建的自定义形状需要将纹理映射作为 uv 坐标传递。

每次调用 vertex() 都必须包括 5 个参数,如 vertex(x, y, z, u, v),以将坐标 (x, y, z) 上的顶点映射到图像中坐标 (u, v) 上的像素。例如,默认情况下,矩形图像的角落被映射到矩形的角落:

// 将图像应用为纹理。 texture(img); <p>// 绘制矩形。 rect(0, 0, 30, 50); </p>

如果上面代码片段中的图像尺寸为 300 x 500 像素,可以按照以下方式实现相同的结果:

// 将图像应用为纹理。 texture(img); <p>// 绘制矩形。 beginShape();</p> <p>// 左上角。 // u: 0, v: 0 vertex(0, 0, 0, 0, 0);</p> <p>// 右上角。 // u: 300, v: 0 vertex(30, 0, 0, 300, 0);</p> <p>// 右下角。 // u: 300, v: 500 vertex(30, 50, 0, 300, 500);</p> <p>// 左下角。 // u: 0, v: 500 vertex(0, 50, 0, 0, 500);</p> <p>endShape(); </p>

textureMode() 用于改变 uv 坐标的坐标系统。

参数 mode 接受两种可能的常量。如果传递 NORMAL,如 textureMode(NORMAL) 中所示,则纹理的 uv 坐标可以在 0 到 1 的范围内提供,而不是图像的尺寸。这对于使用相同的代码处理不同尺寸的多张图像很有帮助。例如,上面的代码片段可以重写如下:

// 设置纹理模式以使用标准化坐标。 textureMode(NORMAL); <p>// 将图像应用为纹理。 texture(img);</p> <p>// 绘制矩形。 beginShape();</p> <p>// 左上角。 // u: 0, v: 0 vertex(0, 0, 0, 0, 0);</p> <p>// 右上角。 // u: 1, v: 0 vertex(30, 0, 0, 1, 0);</p> <p>// 右下角。 // u: 1, v: 1 vertex(30, 50, 0, 1, 1);</p> <p>// 左下角。 // u: 0, v: 1 vertex(0, 50, 0, 0, 1);</p> <p>endShape(); </p>

默认情况下,modeIMAGE,它将 uv 坐标缩放到图像的尺寸。调用 textureMode(IMAGE) 会应用这个默认设置。

注意:textureMode() 只能在 WebGL 模式下使用。

示例

语法

textureMode(mode)

参数

mode

可以是 IMAGE 或 NORMAL。

Notice any errors or typos? Please let us know. Please feel free to edit src/webgl/material.js and open a pull request!

相关参考