gl attribute和uniform的用法


gl attribute和uniform的用法

http://blog.csdn.net/jackers679/article/details/6848085


attribute
    attribute變量是只能在vertex shader中使用的變量。(它不能在fragment shader中聲明attribute變量,也不能被fragment shader中使用)

    一般用attribute變量來表示一些頂點的數據,如:頂點坐標,法線,紋理坐標,頂點顏色等
    在application中,一般用函數glBindAttribLocation()來綁定每個attribute變量的位置,然后用函數glVertexAttribPointer()為每個attribute變量賦值。
    
    glsl里面定義屬性
    Line 16:     attribute vec3 aVertexPosition;
    Line 22:         gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
    
    javascript使用屬性
        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
    Line 97:         gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
    Line 153:         gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
    Line 160:         gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
    
uniform
    uniform變量就像是C語言里面的常量(const ),它不能被shader程序修改。(shader只能用,不能改)
    如果uniform變量在vertex和fragment兩者之間聲明方式完全一樣,則它可以在vertex和fragment共享使用。(相當於一個被vertex和fragment shader共享的全局變量)
    
    uniform變量一般用來表示:變換矩陣,材質,光照參數和顏色等信息。
    
    glsl里
    Line 18:     uniform mat4 uMVMatrix;
    Line 22:         gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
    
    javascript里
    Line 100:         shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
    Line 109:         gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);
    
3.varying變量

varying變量是vertex和fragment shader之間做數據傳遞用的。一般vertex shader修改varying變量的值,然后fragment shader使用該varying變量的值。因此varying變量在vertex和fragment shader二者之間的聲明必須是一致的。application不能使用此變量。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM