three.js Textures

2023-02-16 17:30 更新

映射模式

THREE.UVMapping
THREE.CubeReflectionMapping
THREE.CubeRefractionMapping
THREE.EquirectangularReflectionMapping
THREE.EquirectangularRefractionMapping
THREE.CubeUVReflectionMapping

這些常量定義了紋理貼圖的映射模式。
UVMapping是默認(rèn)值,紋理使用網(wǎng)格的坐標(biāo)來進(jìn)行映射。
其它的值定義了環(huán)境映射的類型。
CubeReflectionMapping 和 CubeRefractionMapping 用于 CubeTexture —— 由6個紋理組合而成,每個紋理都是立方體的一個面。 對于CubeTexture來說,CubeReflectionMapping是其默認(rèn)值。
EquirectangularReflectionMapping 和 EquirectangularRefractionMapping 用于等距圓柱投影的環(huán)境貼圖,也被叫做經(jīng)緯線映射貼圖。等距圓柱投影貼圖表示沿著其水平中線360°的視角,以及沿著其垂直軸向180°的視角。貼圖頂部和底部的邊緣分別對應(yīng)于它所映射的球體的北極和南極。
請查看示例:materials / envmaps 。

包裹模式

THREE.RepeatWrapping
THREE.ClampToEdgeWrapping
THREE.MirroredRepeatWrapping

這些常量定義了紋理貼圖的 wrapS 和 wrapT 屬性,定義了水平和垂直方向上紋理的包裹方式。
使用RepeatWrapping,紋理將簡單地重復(fù)到無窮大。 使用 RepeatWrapping,紋理將簡單地重復(fù)到無窮大。

ClampToEdgeWrapping是默認(rèn)值,紋理中的最后一個像素將延伸到網(wǎng)格的邊緣。
使用MirroredRepeatWrapping, 紋理將重復(fù)到無窮大,在每次重復(fù)時將進(jìn)行鏡像。

放大濾鏡(Magnification Filters)

THREE.NearestFilter
THREE.LinearFilter

這些常量用于紋理的magFilter屬性,它們定義了當(dāng)被紋理化的像素映射到小于或者等于1紋理元素(texel)的區(qū)域時,將要使用的紋理放大函數(shù)。
NearestFilter返回與指定紋理坐標(biāo)(在曼哈頓距離之內(nèi))最接近的紋理元素的值。
LinearFilter是默認(rèn)值,返回距離指定的紋理坐標(biāo)最近的四個紋理元素的加權(quán)平均值, 并且可以包含紋理的其他部分中,被包裹或者被重復(fù)的項目,具體取決于 wrapS 和 wrapT 的值,并在精確映射上。

縮小濾鏡(Minification Filters)

THREE.NearestFilter
THREE.NearestMipmapNearestFilter
THREE.NearestMipmapLinearFilter
THREE.LinearFilter
THREE.LinearMipmapNearestFilter
THREE.LinearMipmapLinearFilter

這些常量用于紋理的minFilter屬性,它們定義了當(dāng)被紋理化的像素映射到大于1紋理元素(texel)的區(qū)域時,將要使用的紋理縮小函數(shù)。

除了NearestFilter 和 LinearFilter, 下面的四個函數(shù)也可以用于縮?。?

NearestMipmapNearestFilter選擇與被紋理化像素的尺寸最匹配的mipmap, 并以NearestFilter(最靠近像素中心的紋理元素)為標(biāo)準(zhǔn)來生成紋理值。

NearestMipmapLinearFilter選擇與被紋理化像素的尺寸最接近的兩個mipmap, 并以NearestFilter為標(biāo)準(zhǔn)來從每個mipmap中生成紋理值。最終的紋理值是這兩個值的加權(quán)平均值。

LinearMipmapNearestFilter選擇與被紋理化像素的尺寸最匹配的mipmap, 并以LinearFilter(最靠近像素中心的四個紋理元素的加權(quán)平均值)為標(biāo)準(zhǔn)來生成紋理值。

LinearMipmapLinearFilter是默認(rèn)值,它選擇與被紋理化像素的尺寸最接近的兩個mipmap, 并以LinearFilter為標(biāo)準(zhǔn)來從每個mipmap中生成紋理值。最終的紋理值是這兩個值的加權(quán)平均值。

請查看示例:materials / texture / filters。

類型

THREE.UnsignedByteType
THREE.ByteType
THREE.ShortType
THREE.UnsignedShortType
THREE.IntType
THREE.UnsignedIntType
THREE.FloatType
THREE.HalfFloatType
THREE.UnsignedShort4444Type
THREE.UnsignedShort5551Type
THREE.UnsignedInt248Type

這些常量用于紋理的type屬性,這些屬性必須與正確的格式相對應(yīng)。詳情請查看下方。

UnsignedByteType 是默認(rèn)值。

格式

THREE.AlphaFormat
THREE.RedFormat
THREE.RedIntegerFormat
THREE.RGFormat
THREE.RGIntegerFormat
THREE.RGBAFormat
THREE.RGBAIntegerFormat
THREE.LuminanceFormat
THREE.LuminanceAlphaFormat
THREE.DepthFormat
THREE.DepthStencilFormat

這些常量用于紋理的format屬性,它們定義了shader(著色器)將如何讀取的2D紋理或者texels(紋理元素)的元素。.

AlphaFormat 丟棄紅、綠、藍(lán)分量,僅讀取Alpha分量。

RedFormat 丟棄綠色和藍(lán)色分量,只讀取紅色分量。

RedIntegerFormat 丟棄綠色和藍(lán)色分量,只讀取紅色分量。紋素被讀取為整數(shù)而不是浮點數(shù)。 (只能與 WebGL 2 渲染上下文一起使用)。

RGFormat 丟棄 alpha 和藍(lán)色分量并讀取紅色和綠色分量。 (只能與 WebGL 2 渲染上下文一起使用)。

RGIntegerFormat 丟棄 alpha 和藍(lán)色分量并讀取紅色和綠色分量。紋素被讀取為整數(shù)而不是浮點數(shù)。 (只能與 WebGL 2 渲染上下文一起使用)。

RGBAFormat 是默認(rèn)值,它將讀取紅、綠、藍(lán)和Alpha分量。

RGBAIntegerFormat 是默認(rèn)值,它讀取紅色、綠色、藍(lán)色和 alpha 分量。紋素被讀取為整數(shù)而不是浮點數(shù)。 (只能與 WebGL 2 渲染上下文一起使用)。

LuminanceFormat 將每個元素作為單獨的亮度分量來讀取。 將其轉(zhuǎn)換為范圍限制在[0,1]區(qū)間的浮點數(shù),然后通過將亮度值放入紅、綠、藍(lán)通道,并將1.0賦給Alpha通道,來組裝成一個RGBA元素。

LuminanceAlphaFormat 將每個元素同時作為亮度分量和Alpha分量來讀取。 和上面LuminanceFormat的處理過程是一致的,除了Alpha分量具有除了1.0以外的值。

DepthFormat將每個元素作為單獨的深度值來讀取,將其轉(zhuǎn)換為范圍限制在[0,1]區(qū)間的浮點數(shù)。 它是DepthTexture的默認(rèn)值。

DepthStencilFormat將每個元素同時作為一對深度值和模板值來讀取。 其中的深度分量解釋為DepthFormat。 模板分量基于深度+模板的內(nèi)部格式來進(jìn)行解釋。

請注意,紋理必須具有正確的type設(shè)置,正如上一節(jié)所描述的那樣。 請參閱WebGLRenderingContext.texImage2D 來獲得有關(guān)詳細(xì)信息。

DDS / ST3C 壓縮紋理格式

THREE.RGB_S3TC_DXT1_Format
THREE.RGBA_S3TC_DXT1_Format
THREE.RGBA_S3TC_DXT3_Format
THREE.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)

THREE.RGB_PVRTC_4BPPV1_Format
THREE.RGB_PVRTC_2BPPV1_Format
THREE.RGBA_PVRTC_4BPPV1_Format
THREE.RGBA_PVRTC_2BPPV1_Format

要使用CompressedTexture中的format屬性,需要獲得 WEBGL_compressed_texture_pvrtc 擴展的支持。

PVRTC通常只在具有PowerVR芯片的移動設(shè)備上可用,這些設(shè)備主要是蘋果設(shè)備。

通過這個擴展,這里的四種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 壓縮紋理格式

THREE.RGB_ETC1_Format
THREE.RGB_ETC2_Format
THREE.RGBA_ETC2_EAC_Format

為了與 CompressedTexture 的格式屬性一起使用,這些需要支持 WEBGL_compressed_texture_etc1 (ETC1) 或 WEBGL_compressed_texture_etc (ETC2) 擴展。

ASTC 壓縮紋理格式

THREE.RGBA_ASTC_4x4_Format
THREE.RGBA_ASTC_5x4_Format
THREE.RGBA_ASTC_5x5_Format
THREE.RGBA_ASTC_6x5_Format
THREE.RGBA_ASTC_6x6_Format
THREE.RGBA_ASTC_8x5_Format
THREE.RGBA_ASTC_8x6_Format
THREE.RGBA_ASTC_8x8_Format
THREE.RGBA_ASTC_10x5_Format
THREE.RGBA_ASTC_10x6_Format
THREE.RGBA_ASTC_10x8_Format
THREE.RGBA_ASTC_10x10_Format
THREE.RGBA_ASTC_12x10_Format
THREE.RGBA_ASTC_12x12_Format

為了與 CompressedTexture 的格式屬性一起使用,這些需要支持 WEBGL_compressed_texture_astc 擴展。

內(nèi)部格式

'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'

注意:更改紋理的內(nèi)部格式只會影響使用 WebGL 2 渲染上下文時的紋理。

為了與紋理的 internalFormat 屬性一起使用,這些定義了紋理元素或紋素如何存儲在 GPU 上。

R8 將紅色分量存儲在 8 位上。

R8_SNORM 將紅色分量存儲在 8 位上。組件按規(guī)范化存儲。

R8I 將紅色分量存儲在 8 位上。該組件存儲為整數(shù)。

R8UI 將紅色分量存儲在 8 位上。該組件存儲為無符號整數(shù)。

R16I 將紅色分量存儲在 16 位上。該組件存儲為整數(shù)。

R16UI 將紅色分量存儲在 16 位上。該組件存儲為無符號整數(shù)。

R16F 以 16 位存儲紅色分量。該組件存儲為浮點數(shù)。

R32I 以 32 位存儲紅色分量。該組件存儲為整數(shù)。

R32UI 以 32 位存儲紅色分量。該組件存儲為無符號整數(shù)。

R32F 以 32 位存儲紅色分量。該組件存儲為浮點數(shù)。

RG8 分別以 8 位存儲紅色和綠色分量。

RG8_SNORM 分別以 8 位存儲紅色和綠色分量。每個組件都按規(guī)范化存儲。

RG8I 將紅色和綠色分量各存儲 8 位。每個組件都存儲為一個整數(shù)。

RG8UI 分別以 8 位存儲紅色和綠色分量。每個組件都存儲為無符號整數(shù)。

RG16I 分別以 16 位存儲紅色和綠色分量。每個組件都存儲為一個整數(shù)。

RG16UI 分別以 16 位存儲紅色和綠色分量。每個組件都存儲為無符號整數(shù)。

RG16F 分別以 16 位存儲紅色和綠色分量。每個組件都存儲為浮點數(shù)。

RG32I 分別以 32 位存儲紅色和綠色分量。每個組件都存儲為一個整數(shù)。

RG32UI 以 32 位存儲紅色和綠色分量。每個組件都存儲為無符號整數(shù)。

RG32F 以 32 位存儲紅色和綠色分量。每個組件都存儲為浮點數(shù)。

RGB8 分別以 8 位存儲紅色、綠色和藍(lán)色分量。 RGB8_SNORM 分別以 8 位存儲紅色、綠色和藍(lán)色分量。每個組件都按規(guī)范化存儲。

RGB8I 分別以 8 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為一個整數(shù)。

RGB8UI 分別以 8 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為無符號整數(shù)。

RGB16I 分別以 16 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為一個整數(shù)。

RGB16UI 分別以 16 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為無符號整數(shù)。

RGB16F 分別以 16 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為浮點數(shù)

RGB32I 分別以 32 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為一個整數(shù)。

RGB32UI 分別以 32 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為無符號整數(shù)。

RGB32F 分別以 32 位存儲紅色、綠色和藍(lán)色分量。每個組件都存儲為浮點數(shù)

R11F_G11F_B10F分別在11位、11位、10位上存儲紅、綠、藍(lán)分量。每個組件都存儲為浮點數(shù)。

RGB565將紅、綠、藍(lán)分量分別存儲在5位、6位、5位上。

RGB9_E5 分別以 9 位存儲紅色、綠色和藍(lán)色分量。

RGBA8 分別以 8 位存儲紅色、綠色、藍(lán)色和 alpha 分量。

RGBA8_SNORM 在 8 位上存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都按規(guī)范化存儲。

RGBA8I 分別以 8 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為一個整數(shù)。

RGBA8UI 以 8 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為無符號整數(shù)。

RGBA16I 以 16 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為一個整數(shù)。

RGBA16UI 以 16 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為無符號整數(shù)。

RGBA16F 以 16 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為浮點數(shù)。

RGBA32I 以 32 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為一個整數(shù)。

RGBA32UI 以 32 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為無符號整數(shù)。

RGBA32F 以 32 位存儲紅色、綠色、藍(lán)色和 alpha 分量。每個組件都存儲為浮點數(shù)。

RGB5_A1分別在5位、5位、5位、1位上存儲紅、綠、藍(lán)、alpha分量。

RGB10_A2分別在10位、10位、10位和2位上存儲紅、綠、藍(lán)、alpha分量。

RGB10_A2UI分別在10位、10位、10位和2位上存儲紅、綠、藍(lán)、alpha分量。每個組件都存儲為無符號整數(shù)。

SRGB8 分別以 8 位存儲紅色、綠色和藍(lán)色分量。

SRGB8_ALPHA8 分別以 8 位存儲紅色、綠色、藍(lán)色和 alpha 分量。

DEPTH_COMPONENT16 在 16 位上存儲深度分量。

DEPTH_COMPONENT24 以 24 位存儲深度分量。

DEPTH_COMPONENT32F 在 32 位上存儲深度分量。該組件存儲為浮點數(shù)。

DEPTH24_STENCIL8 分別在 24 位和 8 位上存儲深度和模板組件。模板組件存儲為無符號整數(shù)。

DEPTH32F_STENCIL8 分別在 32 位和 8 位上存儲深度和模板組件。深度分量存儲為浮點數(shù),模板分量存儲為無符號整數(shù)。

請注意,紋理必須具有正確的類型集以及正確的格式。有關(guān)格式、內(nèi)部格式和類型的可能組合的更多詳細(xì)信息,請參閱 WebGLRenderingContext.texImage2D 和 WebGL2RenderingContext.texImage3D

有關(guān)內(nèi)部格式的更多深入信息,您還可以直接參考 WebGL2 規(guī)范和 OpenGL ES 3.0 規(guī)范。

編碼

THREE.LinearEncoding
THREE.sRGBEncoding
THREE.BasicDepthPacking
THREE.RGBADepthPacking

這些常量用于紋理的encoding屬性。

如果編碼類型在紋理已被一個材質(zhì)使用之后發(fā)生了改變, 你需要來設(shè)置Material.needsUpdate為true來使得材質(zhì)重新編譯。

LinearEncoding是默認(rèn)值。 除此之外的其他值僅在材質(zhì)的貼圖、envMap和emissiveMap中有效。

源代碼

src/constants.js


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號