更改应用于自定义形状时使用的纹理坐标系统。
为了使 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>
默认情况下,mode
是 IMAGE
,它将 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!