zoukankan      html  css  js  c++  java
  • OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)

       

      上一篇中介绍了如何使用shader,用来一个最简单的shader,计算顶点的位置,调用了

    OpenGL 顶点着色语言中的内置变量对顶点进行操作,这一例程中,将展示如何将应用层

    的数据传递到shader中,在shader中完成相应的计算。

      先说下在这一节中,我们要完成的任务,不调用OpenGL的旋转函数(即glRotate××)

    系列函数,不使用矩阵完成对模型的旋转。要完成这样的功能,那么我们就只能借住shader

    来进行计算,编写shader更多的情况要求我们对数学知识了解到更多,掌握的更多,写shader

    就是写一些列的算法,这些算法多数数与数学相关的。今天我们要掌握的知识是:uniform类型

    变量的使用。

      看代码:

        uniform float times;
        void main( void )
        {
            float c = cos(times);
            float s = sin(times);
            vec4  temp = gl_Vertex;
            temp.x = gl_Vertex.x * c - gl_Vertex.y * s;
            temp.y = gl_Vertex.x * s + gl_Vertex.y * c;
            gl_Position = gl_ModelViewProjectionMatrix * temp;
            gl_FrontColor = gl_Color; 
        }

    从c/c++语言的角度来看shader,那么times变量就是一个全局变量,在程序中,我们通过使用

    这个全局变量,来完成对顶点的旋转工作,沿着z轴。现在纹理来了,我们在显卡中生命的变量

    如何才可以在c++的访问。OpenGL扩展api中提供了这样手段来访问uniform类型变量的手段。

    看代码:

    _times  =   glGetUniformLocationARB( _programObj, "times" );

    上面的函数是cpu上执行的函数,_times是一个无符号类型的变量,_programObj也是,在

    上一节中已经做过介绍,就是保存程序的句柄或者叫索引。glGetUniformLocationARB函数的

    第二个参数就是变量的名称,通过这个名称,我们可以得到这个变量对应的句柄(或者叫索引)

    后面通过这个索引我们可以访问shader中的times这个变量了。值得注意到是,这个变量的生存

    周期是对全局的。

      通过调用下面的代码,修改shader中times的值:

    static  float xxx = 0;
    
    glUseProgramObjectARB( _programObj );
    glUniform1fARB(_times,xxx);
    
    xxx +=  0.01f;
     if (xxx > 3.14f)
    {
         xxx =   0;
    }

    这样就将times的值修改了。大家可以慢慢体会这个过程,可以想象一下程序执行的过程,下一例程

    将给大家展示如何在vertex shader中声明例外一个类型的变量。

    代码下载

  • 相关阅读:
    LeetCode Binary Tree Inorder Traversal
    LeetCode Populating Next Right Pointers in Each Node
    LeetCode Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode Reverse Linked List II
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Pascal's Triangle
    Palindrome Construct Binary Tree from Preorder and Inorder Traversal
    Pascal's Triangle II
    LeetCode Word Ladder
    LeetCode Binary Tree Zigzag Level Order Traversal
  • 原文地址:https://www.cnblogs.com/zhanglitong/p/3212611.html
Copyright © 2011-2022 走看看