WebGLRenderingContext.enableVertexAttribArray()

文章推薦指數: 80 %
投票人數:10人

我们用 enableVertexAttribArray() 函数来激活 aVertexPosition 中记录的索引位置,以便在后面对该顶点属性进行数据绑定。

使用 vertexAttribPointer() 将 ... SkiptomaincontentSkiptosearchSkiptoselectlanguageWeb开发技术WebAPI接口参考WebGLRenderingContextWebGLRenderingContext.enableVertexAttribArray()ArticleActions中文(简体)此页面由社区从英文翻译而来。

了解更多并加入MDNWebDocs社区。

语法例子SpecificationsBrowsercompatibilitySeealsoRelatedTopicsWebGLAPIWebGLRenderingContext属性canvasdrawingBufferHeightdrawingBufferWidth方法activeTexture()attachShader()bindAttribLocation()bindBuffer()bindFramebuffer()bindRenderbuffer()bindTexture()blendColor()blendEquation()blendEquationSeparate()blendFunc()blendFuncSeparate()(en-US)bufferData()bufferSubData()(en-US)checkFramebufferStatus()(en-US)clear()clearColor()clearDepth()clearStencil()(en-US)colorMask()(en-US) Experimental commit()compileShader()compressedTexImage[23]D()compressedTexSubImage2D()(en-US)copyTexImage2D()(en-US)copyTexSubImage2D()(en-US)createBuffer()createFramebuffer()createProgram()createRenderbuffer()createShader()createTexture()cullFace()deleteBuffer()deleteFramebuffer()deleteProgram()deleteRenderbuffer()deleteShader()deleteTexture()depthFunc()depthMask()depthRange()(en-US)detachShader()disable()disableVertexAttribArray()(en-US)drawArrays()drawElements()enable()enableVertexAttribArray()finish()(en-US)flush()(en-US)framebufferRenderbuffer()(en-US)framebufferTexture2D()(en-US)frontFace()(en-US)generateMipmap()(en-US)getActiveAttrib()(en-US)getActiveUniform()(en-US)getAttachedShaders()(en-US)getAttribLocation()getBufferParameter()(en-US)getContextAttributes()getError()(en-US)getExtension()getFramebufferAttachmentParameter()(en-US)getParameter()getProgramInfoLog()getProgramParameter()getRenderbufferParameter()(en-US)getShaderInfoLog()(en-US)getShaderParameter()getShaderPrecisionFormat()(en-US)getShaderSource()getSupportedExtensions()getTexParameter()getUniform()getUniformLocation()(en-US)getVertexAttrib()(en-US)getVertexAttribOffset()(en-US)hint()(en-US)isBuffer()isContextLost()isEnabled()isFramebuffer()(en-US)isProgram()isRenderbuffer()(en-US)isShader()isTexture()(en-US)lineWidth()(en-US)linkProgram()makeXRCompatible()(en-US)pixelStorei()polygonOffset()readPixels()(en-US)renderbufferStorage()sampleCoverage()(en-US)scissor()shaderSource()stencilFunc()(en-US)stencilFuncSeparate()(en-US)stencilMask()(en-US)stencilMaskSeparate()(en-US)stencilOp()(en-US)stencilOpSeparate()(en-US)texImage2D()texParameter[fi]()texSubImage2D()(en-US)uniform[1234][fi][v]()uniformMatrix[234]fv()useProgram()validateProgram()vertexAttrib[1234]f[v]()vertexAttribPointer()viewport()RelatedpagesforWebGLANGLE_instanced_arraysEXT_blend_minmax(en-US)EXT_color_buffer_half_float(en-US)EXT_disjoint_timer_query(en-US)EXT_frag_depth(en-US)EXT_sRGB(en-US)EXT_shader_texture_lod(en-US)EXT_texture_filter_anisotropic(en-US)OES_element_index_uint(en-US)OES_standard_derivatives(en-US)OES_texture_float(en-US)OES_texture_float_linear(en-US)OES_texture_half_float(en-US)OES_texture_half_float_linear(en-US)OES_vertex_array_objectWEBGL_color_buffer_float(en-US)WEBGL_compressed_texture_etc1(en-US)WEBGL_compressed_texture_pvrtc(en-US)WEBGL_compressed_texture_s3tc(en-US)WEBGL_compressed_texture_s3tc_srgb(en-US)WEBGL_debug_renderer_info(en-US)WEBGL_debug_shaders(en-US)WEBGL_depth_texture(en-US)WEBGL_draw_buffers(en-US)WEBGL_lose_contextWebGL2RenderingContextWebGLActiveInfoWebGLBufferWebGLContextEventWebGLFramebufferWebGLObjectWebGLProgramWebGLQueryWebGLRenderbufferWebGLSamplerWebGLShaderWebGLShaderPrecisionFormatWebGLSyncWebGLTextureWebGLTransformFeedback(en-US)WebGLUniformLocationWebGLVertexArrayObject语法例子SpecificationsBrowsercompatibilitySeealsoWebGLRenderingContext.enableVertexAttribArray() 在WebGLAPI中,使用WebGLRenderingContext中的enableVertexAttribArray() 方法,可以打开属性数组列表中指定索引处的通用顶点属性数组。

你可以通过以下方法关闭顶点属性数组 disableVertexAttribArray()(en-US). 在WebGL中,作用于顶点的数据会先储存在attributes。

这些数据仅对JavaScript代码和顶点着色器可用。

属性由索引号引用到GPU维护的属性列表中。

在不同的平台或GPU上,某些顶点属性索引可能具有预定义的值。

创建属性时,WebGL层会分配其他属性。

无论怎样,都需要你使用enableVertexAttribArray()方法,来激活每一个属性以便使用,不被激活的属性是不会被使用的。

一旦激活,以下其他方法就可以获取到属性的值了,包括vertexAttribPointer(),vertexAttrib*(),和 getVertexAttrib()(en-US)。

语法voidgl.enableVertexAttribArray(index); 参数index 类型为GLuint(en-US)的索引,指向要激活的顶点属性。

如果您只知道属性的名称,不知道索引,您可以使用以下方法来获取索引getAttribLocation(). 返回值undefined.错误您可以使用getError()(en-US)方法,来检查使用enableVertexAttribArray()时发生的错误。

WebGLRenderingContext.INVALID_VALUE 非法的index 。

一般是index 大于或等于了顶点属性列表允许的最大值。

该值可以通过WebGLRenderingContext.MAX_VERTEX_ATTRIBS获取。

例子该例子是Abasic2DWebGLanimationexample中的一部分,用以说明enableVertexArray() 是如何激活顶点属性,并将顶点数据传输到shader函数的。

gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer); aVertexPosition= gl.getAttribLocation(shaderProgram,"aVertexPosition"); gl.enableVertexAttribArray(aVertexPosition); gl.vertexAttribPointer(aVertexPosition,vertexNumComponents, gl.FLOAT,false,0,0); gl.drawArrays(gl.TRIANGLES,0,vertexCount); 该段代码来自于 "Abasic2DWebGLanimationexample."中的 thefunctionanimateScene() 。

 通过连接来查看全文,您可以查看产生的动画效果。

以上代码中,使用了bindBuffer()来设置将用于绘图的顶点数据的缓存。

然后使用getAttribLocation()来获取顶点数据在shader函数中的索引。

我们用enableVertexAttribArray() 函数来激活aVertexPosition中记录的索引位置,以便在后面对该顶点属性进行数据绑定。

使用vertexAttribPointer()将缓存数据绑定到shader函数中的顶点属性。

于是,我们可以通过drawArrays()函数将顶点一一绘制。

Specifications Specification Status Comment WebGL1.0enableVertexAttribArray Recommendation Initialdefinition. OpenGLES2.0glEnableVertexAttribArray Standard ManpageoftheOpenGLAPI. BrowsercompatibilityBCDtablesonlyloadinthebrowserSeealso DatainWebGL Adding2DcontenttoaWebGLcontext Abasic2DWebGLanimationsample disableVertexAttribArray()(en-US) Foundaproblemwiththispage?EditonGitHubSourceonGitHubReportaproblemwiththiscontentonGitHubWanttofixtheproblemyourself?SeeourContributionguide.Lastmodified:2022年6月2日,byMDNcontributors



請為這篇文章評分?