Textures - Verge3D 用户手册 - Soft8Soft
Description: 了解如何在使用 Verge3D 制作的交互式 3D 应用程序中使用 Textures

# 材质常量（Texture Constants）

## 映射模式

`v3d.UVMapping v3d.CubeReflectionMapping v3d.CubeRefractionMapping v3d.EquirectangularReflectionMapping v3d.EquirectangularRefractionMapping v3d.CubeUVReflectionMapping v3d.CubeUVRefractionMapping`

这些常量定义了纹理贴图的映射模式。
UVMapping是默认值，纹理使用网格的坐标来进行映射。
其它的值定义了环境映射的类型。
CubeReflectionMapping 和 CubeRefractionMapping 用于 CubeTexture —— 由6个纹理组合而成，每个纹理都是立方体的一个面。 对于CubeTexture来说，CubeReflectionMapping是其默认值。
EquirectangularReflectionMapping 和 EquirectangularRefractionMapping 用于等距圆柱投影的环境贴图，也被叫做经纬线映射贴图。等距圆柱投影贴图表示沿着其水平中线360°的视角，以及沿着其垂直轴向180°的视角。贴图顶部和底部的边缘分别对应于它所映射的球体的北极和南极。

## 包裹模式

`v3d.RepeatWrapping v3d.ClampToEdgeWrapping v3d.MirroredRepeatWrapping`

这些常量定义了纹理贴图的 wrapS 和 wrapT 属性，定义了水平和垂直方向上纹理的包裹方式。
使用RepeatWrapping，纹理将简单地重复到无穷大。 With RepeatWrapping the texture will simply repeat to infinity.
ClampToEdgeWrapping是默认值，纹理中的最后一个像素将延伸到网格的边缘。
使用MirroredRepeatWrapping， 纹理将重复到无穷大，在每次重复时将进行镜像。

## 放大滤镜（Magnification Filters）

`v3d.NearestFilter v3d.LinearFilter`

这些常量用于纹理的magFilter属性，它们定义了当被纹理化的像素映射到小于或者等于1纹理元素（texel）的区域时，将要使用的纹理放大函数。
NearestFilter返回与指定纹理坐标（在曼哈顿距离之内）最接近的纹理元素的值。
LinearFilter是默认值，返回距离指定的纹理坐标最近的四个纹理元素的加权平均值， 并且可以包含纹理的其他部分中，被包裹或者被重复的项目，具体取决于 wrapS 和 wrapT 的值，and on the exact mapping。

## 缩小滤镜（Minification Filters）

`v3d.NearestFilter v3d.NearestMipmapNearestFilter v3d.NearestMipmapLinearFilter v3d.LinearFilter v3d.LinearMipmapNearestFilter v3d.LinearMipmapLinearFilter`

这些常量用于纹理的minFilter属性，它们定义了当被纹理化的像素映射到大于1纹理元素（texel）的区域时，将要使用的纹理缩小函数。
除了NearestFilter 和 LinearFilter， 下面的四个函数也可以用于缩小：
NearestMipmapNearestFilter选择与被纹理化像素的尺寸最匹配的mipmap， 并以NearestFilter（最靠近像素中心的纹理元素）为标准来生成纹理值。
NearestMipmapLinearFilter选择与被纹理化像素的尺寸最接近的两个mipmap， 并以NearestFilter为标准来从每个mipmap中生成纹理值。最终的纹理值是这两个值的加权平均值。
LinearMipmapNearestFilter选择与被纹理化像素的尺寸最匹配的mipmap， 并以LinearFilter（最靠近像素中心的四个纹理元素的加权平均值）为标准来生成纹理值。
LinearMipmapLinearFilter是默认值，它选择与被纹理化像素的尺寸最接近的两个mipmap， 并以LinearFilter为标准来从每个mipmap中生成纹理值。最终的纹理值是这两个值的加权平均值。

## 类型

`v3d.UnsignedByteType v3d.ByteType v3d.ShortType v3d.UnsignedShortType v3d.IntType v3d.UnsignedIntType v3d.FloatType v3d.HalfFloatType v3d.UnsignedShort4444Type v3d.UnsignedShort5551Type v3d.UnsignedShort565Type v3d.UnsignedInt248Type`

这些常量用于纹理的type属性，这些属性必须与正确的格式相对应。详情请查看下方。
UnsignedByteType 是默认值。

## 格式

`v3d.AlphaFormat v3d.RedFormat v3d.RedIntegerFormat v3d.RGFormat v3d.RGIntegerFormat v3d.RGBFormat v3d.RGBIntegerFormat v3d.RGBAFormat v3d.RGBAIntegerFormat v3d.LuminanceFormat v3d.LuminanceAlphaFormat v3d.RGBEFormat v3d.DepthFormat v3d.DepthStencilFormat`

这些常量用于纹理的format属性，它们定义了shader（着色器）将如何读取的2D纹理或者texels（纹理元素）的元素。.
AlphaFormat 丢弃红、绿、蓝分量，仅读取Alpha分量。
RedFormat discards the green and blue components and reads just the red component.
RedIntegerFormat discards the green and blue components and reads just the red component. The texels are read as integers instead of floating point. (can only be used with a WebGL 2 rendering context).
RGFormat discards the alpha, and blue components and reads the red, and green components. (can only be used with a WebGL 2 rendering context).
RGIntegerFormat discards the alpha, and blue components and reads the red, and green components. The texels are read as integers instead of floating point. (can only be used with a WebGL 2 rendering context).
RGBFormat 丢弃Alpha分量，仅读取红、绿、蓝分量。
RGBIntegerFormat discards the alpha components and reads the red, green and blue components. (can only be used with a WebGL 2 rendering context).
RGBAFormat 是默认值，它将读取红、绿、蓝和Alpha分量。
RGBAIntegerFormat is the default and reads the red, green, blue and alpha components. The texels are read as integers instead of floating point. (can only be used with a WebGL 2 rendering context).
LuminanceFormat 将每个元素作为单独的亮度分量来读取。 将其转换为范围限制在[0,1]区间的浮点数，然后通过将亮度值放入红、绿、蓝通道，并将1.0赋给Alpha通道，来组装成一个RGBA元素。
LuminanceAlphaFormat 将每个元素同时作为亮度分量和Alpha分量来读取。 和上面LuminanceFormat的处理过程是一致的，除了Alpha分量具有除了1.0以外的值。
RGBEFormat 与 RGBAFormat 是相同的。
DepthFormat将每个元素作为单独的深度值来读取，将其转换为范围限制在[0,1]区间的浮点数。 它是DepthTexture的默认值。
DepthStencilFormat将每个元素同时作为一对深度值和模板值来读取。 其中的深度分量解释为DepthFormat。 模板分量基于深度+模板的内部格式来进行解释。
请注意，纹理必须具有正确的type设置，正如上一节所描述的那样。 请参阅WebGLRenderingContext.texImage2D 来获得有关详细信息。

## DDS / ST3C 压缩纹理格式

`v3d.RGB_S3TC_DXT1_Format v3d.RGBA_S3TC_DXT1_Format v3d.RGBA_S3TC_DXT3_Format v3d.RGBA_S3TC_DXT5_Format`

要使用CompressedTexture中的format属性， 需要获得WEBGL_compressed_texture_s3tc 扩展的支持。
通过这个扩展，这里的四种S3TC格式将可以使用：
RGB_S3TC_DXT1_Format：RGB图像格式的DXT1压缩图像。 RGBA_S3TC_DXT1_Format：RGB图像格式的DXT1压缩图像，Alpha仅具有是/否透明两个值。
RGBA_S3TC_DXT3_Format：RGBA图像格式的DXT3压缩图像，和32位RGBA纹理贴图相比，它提供了4:1的压缩比。
RGBA_S3TC_DXT5_Format：RGBA图像格式的DXT5压缩图像，它也提供了4:1的压缩比，但与DX3格式的不同之处在于其Alpha是如何被压缩的。

## PVRTC 压缩纹理格式（PVRTC Compressed Texture Formats）

`v3d.RGB_PVRTC_4BPPV1_Format v3d.RGB_PVRTC_2BPPV1_Format v3d.RGBA_PVRTC_4BPPV1_Format v3d.RGBA_PVRTC_2BPPV1_Format`

要使用CompressedTexture中的format属性，需要获得 WEBGL_compressed_texture_pvrtc 扩展的支持。
PVRTC通常只在具有PowerVR芯片的移动设备上可用，这些设备主要是苹果设备。
通过这个扩展，这里的四种PVRTC格式将可以使用：
RGB_PVRTC_4BPPV1_Format：4位模式下的RGB压缩，每4x4像素一个块。
RGB_PVRTC_2BPPV1_Format：2位模式下的RGB压缩，每8x4像素一个块。
RGBA_PVRTC_4BPPV1_Format: 4位模式下的RGBA压缩，每4x4像素一个块。
RGBA_PVRTC_2BPPV1_Format: 2位模式下的RGB压缩，每8x4像素一个块。

## ETC 压缩纹理格式

`v3d.RGB_ETC1_Format v3d.RGB_ETC2_Format v3d.RGBA_ETC2_EAC_Format`

For use with a CompressedTexture's format property, these require support for the WEBGL_compressed_texture_etc1 (ETC1) or WEBGL_compressed_texture_etc (ETC2) extensions.

## ASTC Compressed Texture Format

`v3d.RGBA_ASTC_4x4_Format v3d.RGBA_ASTC_5x4_Format v3d.RGBA_ASTC_5x5_Format v3d.RGBA_ASTC_6x5_Format v3d.RGBA_ASTC_6x6_Format v3d.RGBA_ASTC_8x5_Format v3d.RGBA_ASTC_8x6_Format v3d.RGBA_ASTC_8x8_Format v3d.RGBA_ASTC_10x5_Format v3d.RGBA_ASTC_10x6_Format v3d.RGBA_ASTC_10x8_Format v3d.RGBA_ASTC_10x10_Format v3d.RGBA_ASTC_12x10_Format v3d.RGBA_ASTC_12x12_Format v3d.SRGB8_ALPHA8_ASTC_4x4_Format v3d.SRGB8_ALPHA8_ASTC_5x4_Format v3d.SRGB8_ALPHA8_ASTC_5x5_Format v3d.SRGB8_ALPHA8_ASTC_6x5_Format v3d.SRGB8_ALPHA8_ASTC_6x6_Format v3d.SRGB8_ALPHA8_ASTC_8x5_Format v3d.SRGB8_ALPHA8_ASTC_8x6_Format v3d.SRGB8_ALPHA8_ASTC_8x8_Format v3d.SRGB8_ALPHA8_ASTC_10x5_Format v3d.SRGB8_ALPHA8_ASTC_10x6_Format v3d.SRGB8_ALPHA8_ASTC_10x8_Format v3d.SRGB8_ALPHA8_ASTC_10x10_Format v3d.SRGB8_ALPHA8_ASTC_12x10_Format v3d.SRGB8_ALPHA8_ASTC_12x12_Format`

For use with a CompressedTexture's format property, these require support for the WEBGL_compressed_texture_astc extension.

## Internal Formats

`'ALPHA' 'RGB' 'RGBA' 'LUMINANCE' 'LUMINANCE_ALPHA' 'RED_INTEGER' 'R8' 'R8_SNORM' 'R8I' 'R8UI' 'R16I' 'R16UI' 'R16F' 'R32I' 'R32UI' 'R32F' 'RG8' 'RG8_SNORM' 'RG8I' 'RG8UI' 'RG16I' 'RG16UI' 'RG16F' 'RG32I' 'RG32UI' 'RG32F' 'RGB565' 'RGB8' 'RGB8_SNORM' 'RGB8I' 'RGB8UI' 'RGB16I' 'RGB16UI' 'RGB16F' 'RGB32I' 'RGB32UI' 'RGB32F' 'RGB9_E5' 'SRGB8' 'R11F_G11F_B10F' 'RGBA4' 'RGBA8' 'RGBA8_SNORM' 'RGBA8I' 'RGBA8UI' 'RGBA16I' 'RGBA16UI' 'RGBA16F' 'RGBA32I' 'RGBA32UI' 'RGBA32F' 'RGB5_A1' 'RGB10_A2' 'RGB10_A2UI' 'SRGB8_ALPHA8' 'DEPTH_COMPONENT16' 'DEPTH_COMPONENT24' 'DEPTH_COMPONENT32F' 'DEPTH24_STENCIL8' 'DEPTH32F_STENCIL8'`

Heads up: changing the internal format of a texture will only affect the texture when using a WebGL 2 rendering context.
For use with a texture's internalFormat property, these define how elements of a texture, or texels, are stored on the GPU.
R8 stores the red component on 8 bits.
R8_SNORM stores the red component on 8 bits. The component is stored as normalized.
R8I stores the red component on 8 bits. The component is stored as an integer.
R8UI stores the red component on 8 bits. The component is stored as an unsigned integer.
R16I stores the red component on 16 bits. The component is stored as an integer.
R16UI stores the red component on 16 bits. The component is stored as an unsigned integer.
R16F stores the red component on 16 bits. The component is stored as floating point.
R32I stores the red component on 32 bits. The component is stored as an integer.
R32UI stores the red component on 32 bits. The component is stored as an unsigned integer.
R32F stores the red component on 32 bits. The component is stored as floating point.
RG8 stores the red and green components on 8 bits each.
RG8_SNORM stores the red and green components on 8 bits each. Every component is stored as normalized.
RG8I stores the red and green components on 8 bits each. Every component is stored as an integer.
RG8UI stores the red and green components on 8 bits each. Every component is stored as an unsigned integer.
RG16I stores the red and green components on 16 bits each. Every component is stored as an integer.
RG16UI stores the red and green components on 16 bits each. Every component is stored as an unsigned integer.
RG16F stores the red and green components on 16 bits each. Every component is stored as floating point.
RG32I stores the red and green components on 32 bits each. Every component is stored as an integer.
RG32UI stores the red and green components on 32 bits. Every component is stored as an unsigned integer.
RG32F stores the red and green components on 32 bits. Every component is stored as floating point.
RGB8 stores the red, green, and blue components on 8 bits each. RGB8_SNORM stores the red, green, and blue components on 8 bits each. Every component is stored as normalized.
RGB8I stores the red, green, and blue components on 8 bits each. Every component is stored as an integer.
RGB8UI stores the red, green, and blue components on 8 bits each. Every component is stored as an unsigned integer.
RGB16I stores the red, green, and blue components on 16 bits each. Every component is stored as an integer.
RGB16UI stores the red, green, and blue components on 16 bits each. Every component is stored as an unsigned integer.
RGB16F stores the red, green, and blue components on 16 bits each. Every component is stored as floating point
RGB32I stores the red, green, and blue components on 32 bits each. Every component is stored as an integer.
RGB32UI stores the red, green, and blue components on 32 bits each. Every component is stored as an unsigned integer.
RGB32F stores the red, green, and blue components on 32 bits each. Every component is stored as floating point
R11F_G11F_B10F stores the red, green, and blue components respectively on 11 bits, 11 bits, and 10bits. Every component is stored as floating point.
RGB565 stores the red, green, and blue components respectively on 5 bits, 6 bits, and 5 bits.
RGB9_E5 stores the red, green, and blue components on 9 bits each.
RGBA8 stores the red, green, blue, and alpha components on 8 bits each.
RGBA8_SNORM stores the red, green, blue, and alpha components on 8 bits. Every component is stored as normalized.
RGBA8I stores the red, green, blue, and alpha components on 8 bits each. Every component is stored as an integer.
RGBA8UI stores the red, green, blue, and alpha components on 8 bits. Every component is stored as an unsigned integer.
RGBA16I stores the red, green, blue, and alpha components on 16 bits. Every component is stored as an integer.
RGBA16UI stores the red, green, blue, and alpha components on 16 bits. Every component is stored as an unsigned integer.
RGBA16F stores the red, green, blue, and alpha components on 16 bits. Every component is stored as floating point.
RGBA32I stores the red, green, blue, and alpha components on 32 bits. Every component is stored as an integer.
RGBA32UI stores the red, green, blue, and alpha components on 32 bits. Every component is stored as an unsigned integer.
RGBA32F stores the red, green, blue, and alpha components on 32 bits. Every component is stored as floating point.
RGB5_A1 stores the red, green, blue, and alpha components respectively on 5 bits, 5 bits, 5 bits, and 1 bit.
RGB10_A2 stores the red, green, blue, and alpha components respectively on 10 bits, 10 bits, 10 bits and 2 bits.
RGB10_A2UI stores the red, green, blue, and alpha components respectively on 10 bits, 10 bits, 10 bits and 2 bits. Every component is stored as an unsigned integer.
SRGB8 stores the red, green, and blue components on 8 bits each.
SRGB8_ALPHA8 stores the red, green, blue, and alpha components on 8 bits each.
DEPTH_COMPONENT16 stores the depth component on 16bits.
DEPTH_COMPONENT24 stores the depth component on 24bits.
DEPTH_COMPONENT32F stores the depth component on 32bits. The component is stored as floating point.
DEPTH24_STENCIL8 stores the depth, and stencil components respectively on 24 bits and 8 bits. The stencil component is stored as an unsigned integer.
DEPTH32F_STENCIL8 stores the depth, and stencil components respectively on 32 bits and 8 bits. The depth component is stored as floating point, and the stencil component as an unsigned integer.
Note that the texture must have the correct type set, as well as the correct format. See WebGLRenderingContext.texImage2D, and WebGL2RenderingContext.texImage3D, for more details regarding the possible combination of format, internalFormat, and type.
For more in-depth information regarding internal formats, you can also refer directly to the WebGL2 Specification and to the OpenGL ES 3.0 Specification.

## 编码

`v3d.LinearEncoding v3d.sRGBEncoding v3d.GammaEncoding v3d.RGBEEncoding v3d.LogLuvEncoding v3d.RGBM7Encoding v3d.RGBM16Encoding v3d.RGBDEncoding v3d.BasicDepthPacking v3d.RGBADepthPacking`

这些常量用于纹理的encoding属性。
如果编码类型在纹理已被一个材质使用之后发生了改变， 你需要来设置Material.needsUpdate为true来使得材质重新编译。
LinearEncoding是默认值。 除此之外的其他值仅在材质的贴图、envMap和emissiveMap中有效。

## 源代码

src/constants.js