GLSL中變數傳遞的學習筆記

來源:互聯網
上載者:User

近階段簡單的學習了GLSL,對於很多新手,可能主要就是GLSL中shader與opengl之間的變數傳遞問題存在障礙,下面把學習的筆記曬一曬,希望能協助大家。

剛開始寫部落格,歡迎大家提意見和拍磚!

 

輸出類型:
        vertex shader   :gl_Position
        Fragment shader :gl_FragColor   gl_FragDepth

 

1、屬性資料  attribute  頂點屬性,向vertex shader中傳遞
   1、預設內建屬性資料 gl_Color  gl_Normal  gl_Vertex gl_TextCoord,這些頂點屬性由opengl程式向shader中發送
      在vertex shader中可以直接調用gl_Color這樣的寫法
   2、自訂屬性
      //attribute
     int my_vec3_location = glGetAttribLocationARB(my_program,“my_3d_vector”);//定義一個my_3d_vector的量,每  個頂點設定它的值
 glBegin(GL_TRIANGLES);

 glVertexAttrib3f(my_vec3_location, 4.0f, 2.0f, 7.0f);
 glVertex3f(1.0f, 1.0f, 1.0f);

 glVertexAttrib3f(my_vec3_location, 2.0f, 9.0f, 2.0f);
 glVertex3f(-1.0f, 1.0f, 1.0f);

 glVertexAttrib3f(my_vec3_location, 1.0f, 0.0f, 5.0f);
 glVertex3f(1.0f, -1.0f, 1.0f);
 glEnd();
        在vertex shader中:
                         attribute vec3 my_3d_vector;//這樣就能接受到了

  
2、一致變數  Uniform  提供相對不變的參量,Opengl向vertex shader或Fragment shader傳遞資料,在shader中是唯讀
Uniform 使用:
   1、在application中聲明
         GLint my_color;
         my_color = glGetUniformLocation(p,"define_color");//p是glCreateProgram()建立的,define_color是變數名稱
         glUniform4f(my_color, 0.0,1.0,0.0,0.0);
   2、在shader中
        uniform vec4 define_color;//聲明
        void main()                      
       {
          gl_FragColor= define_color;//使用
       }
   
3、易變變數  varying  由vertex shader向Fragment shader中傳遞資料
        varying vec4 ambient;//vertex shader中聲明,具體操作
        varying vec4 ambient;//Fragment shader中聲明,可以使用

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.