<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] > [參考](https://colin1994.github.io/2017/11/11/OpenGLES-Lesson04/) ## GLSL - OpenGL著色器語言( OpenGL Shading Language) - 讓開發者可以對渲染過程擁有更多的控制 ![](https://img.kancloud.cn/b5/0a/b50a8650f59fc04ba80a2e9ba6a13788_400x219.png) ## 基礎語法 demo: ``` // 頂點著色器 .vsh attribute vec4 position; attribute vec4 color; varying vec4 colorVarying; void main(void) { colorVarying = color; gl_Position = position; } // 片段著色器 .fsh varying lowp vec4 colorVarying; void main(void) { gl_FragColor = colorVarying; } ``` ### 變量類型 | 變量類別 | 變量類型 | 描述 | | --- | --- | --- | | 空 | void | 用于無返回值的函數或空的參數列表 | | 標量 | float, int, bool | 浮點型,整型,布爾型的標量數據類型 | | 浮點型向量 | float, vec2, vec3, vec4 | 包含1,2,3,4個元素的浮點型向量 | | 整數型向量 | int, ivec2, ivec3, ivec4 | 包含1,2,3,4個元素的整型向量 | | 布爾型向量 | bool, bvec2, bvec3, bvec4 | 包含1,2,3,4個元素的布爾型向量 | | 矩陣 | mat2, mat3, mat4 | 尺寸為2x2,3x3,4x4的浮點型矩陣 | | 紋理句柄 | sampler2D, samplerCube | 表示2D,立方體紋理的句柄 | > GLSL 中沒有指針類型 **標量** ``` float myFloat = 1.0; bool myBool = true; myFloat = float(myBool); // bool -> float myBool = bool(myFloat); // float -> bool ``` **向量** - 如果向量構造器中只提供了一個標量參數,則向量中所有值都會設定為該標量值。 - 如果提供了多個標量值或提供了向量參數,則會從左至右使用提供的參數來給向量賦值,如果使用多個標量來賦值,則需要確保標量的個數要多于向量構造器中的個數 ``` vec4 myVec4 = vec4(1.0); // myVec4 = {1.0, 1.0, 1.0, 1.0} vec3 myVec3 = vec3(1.0, 0.0, 0.5); // myVec3 = {1.0, 0.0, 0.5} vec3 temp = vec3(myVec3); // temp = myVec3 vec2 myVec2 = vec2(myVec3); // myVec2 = {myVec3.x, myVec3.y} myVec4 = vec4(myVec2, temp, 0.0); // myVec4 = {myVec2.x, myVec2.y , temp, 0.0 } ``` **矩陣** ``` mat3 myMat3 = mat3(1.0, 0.0, 0.0, // 第一列 0.0, 1.0, 0.0, // 第二列 0.0, 1.0, 1.0); // 第三列 ``` | 分量訪問符 | 符號描述 | | --- | --- | | (x,y,z,w) | 與位置相關的分量 | | (r,g,b,a) | 與顏色相關的分量 | | (s,t,p,q) | 與紋理坐標相關的分量 | ``` vec3 myVec3 = vec3(0.0, 1.0, 2.0); // myVec3 = {0.0, 1.0, 2.0} vec3 temp; temp = myVec3.xyz; // temp = {0.0, 1.0, 2.0} temp = myVec3.xxx; // temp = {0.0, 0.0, 0.0} temp = myVec3.zyx; // temp = {2.0, 1.0, 0.0} ``` **向量和矩陣的操作** ``` vec3 v, u; float f; v = u + f; // 等價于 v.x = u.x + f; v.y = u.y + f; v.z = u.z + f; ``` ``` vec3 v, u, w; w = v + u; // 等價于 w.x = v.x + u.x; w.y = v.y + u.y; w.z = v.z + u.z; ``` ### 限定符 | 限定符 | 描述 | | --- | --- | | | 局部可讀寫變量,或者函數的參數 | | const | 編譯時常量,或只讀的函數參數 | | attribute | 由應用程序傳輸給頂點著色器的逐頂點的數據 | | uniform | 在圖元處理過程中其值保持不變,由應用程序傳輸給著色器 | | varying | 由頂點著色器傳輸給片段著色器中的插值數據 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看