博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)
阅读量:5015 次
发布时间:2019-06-12

本文共 1371 字,大约阅读时间需要 4 分钟。

   

  上一篇中介绍了如何使用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中声明例外一个类型的变量。

转载于:https://www.cnblogs.com/zhanglitong/p/3212611.html

你可能感兴趣的文章
nginx在Windows环境安装
查看>>
MVC案例——删除操作
查看>>
Timer和TimerTask的使用--2
查看>>
UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)
查看>>
FileUpload1.PostedFile.FileName 获取的文件名
查看>>
Mock InjectMocks ( @Mock 和 @InjectMocks )区别
查看>>
如何获取免版权图片资源
查看>>
MySql避免全表扫描【转】
查看>>
Storm学习笔记二
查看>>
windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)
查看>>
java===单类设计模式之饿汉式与懒汉式
查看>>
BZOJ 1083: [SCOI2005]繁忙的都市
查看>>
Maven 编译
查看>>
《学习之道》第十章学习方法29还记得散步的好处嘛
查看>>
Git常用命令总结
查看>>
iOS获取设备IP地址
查看>>
JavaSE| String常用方法
查看>>
NRF51822配对绑定要点
查看>>
C语言博客作业—数据类型
查看>>
[leetcode]Count and Say
查看>>