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 = ;
- glUseProgramObjectARB( _programObj );
- glUniform1fARB(_times,xxx);
- xxx += 0.01f;
- if (xxx > 3.14f)
- {
- xxx = ;
- }
这样就将times的值修改了。大家可以慢慢体会这个过程,可以想象一下程序执行的过程,下一例程
将给大家展示如何在vertex shader中声明例外一个类型的变量。
OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)的更多相关文章
- OpenGL12-shader(GLSL)着色语言1(代码已上传)
OpenGL着色语言(GLSL――OpenGL Shading Language)是用来在OpenGL中着色编程的语言, 也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic P ...
- GLSL着色语言学习。橙皮书第一个例子GLSL+OpenTK+F#的实现。
Opengl红皮书有选择的看了一些,最后的讲着色语言GLSL的部分看的甚为不理解,然后找到Opengl橙皮书,然后就容易理解多了. 在前面,我们或多或少接触到Opengl的处理过程,只说前面一些处理, ...
- OpenGL12-shader(GLSL)着色语言3-(属性参数)(代码已上传)
上一个例程中,使用了uniform 类型的变量,uniform可以理解为全局变量,这一节中使用 的是attribute类型的变量,翻译过来就是属性,他是与顶点绑定的,就意味着一个顶点可以 有很多个属性 ...
- OpenGL12-shader(GLSL)着色语言4-广告版的实现
之前介绍了vertex shader的基本原理,现在我们来做一个简单的实践,在游戏中广告版(布告版) 随处可见,而且效率很高,现在我们就使用shader来实现这一过程,首先我们要知道布告版的原理 实际 ...
- 着色语言(Shader Language)
摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...
- win7,64bit下的OpenGL着色语言(glsl)开发环境配置(原)
一.环境准备: 系统环境win7,64位,双显卡:集成显卡+gt540m,gt540建议下载最新的驱动,可以支持到opengl4.3标准,一般双显的笔记本,程序默认启用的是集显,我机器的集显驱动有点老 ...
- DirectX9:高级着色语言(HLSL)
一.简介 高级着色语言(High)可以编写顶点着色器和像素着色器,取代固定功能流水线中的部分功能,在图形卡的GPU(Graphics Processing Unit,图形处理单元)中执行 注意:如果图 ...
- OPENGL学习笔记整理(五):着色语言
有些事情本身就是十分奇怪的.在传统上,图形硬件的设计目的是用于快速执行相同的硬编译指令集.不同的计算步骤可以被跳过,参数可以被调整,但计算本身确实固定不变的.然而,随着技术的发展,却越来越变得可以编程 ...
- Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.
这篇文章给大家讲Obj模型里一些基本功能的完善,包含Cg着色语言,矩阵转换,光照,多重纹理,法线贴图的运用. 在上篇中,我们用GLSL实现了基本的phong光照,这里用Cg着色语言来实现另一钟Blin ...
随机推荐
- Codeforces777B Game of Credit Cards 2017-05-04 17:19 29人阅读 评论(0) 收藏
B. Game of Credit Cards time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- ZOJ2405 Specialized Four-Digit Numbers 2017-04-18 20:43 44人阅读 评论(0) 收藏
Specialized Four-Digit Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB Find and list all f ...
- 转: JaxbContext生成xml文件或java类对象转化注解
JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换.在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版 ...
- Spring MVC深入讲解
一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...
- 程序员MAC必备
排名不分先后 • iTerm 2 终端工具(建议配合oh-my-zsh使用) • Shadowsocks ***工具 (可用于FQ) • Foxmail 邮箱工具 (适用于企业邮箱登陆) • ...
- Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...
- C# 读取Excel表格内容,以及NPOI的使用
在实际的开发中,我们可能需要读写word或者Excel的内容,在我开发的项目中,需要读取Excel的内容,并将相对应的内容存储到数据库中,这里简单跟大家分享一下,希望能够帮助一些人. 我相信在读写wo ...
- NLayerAppV3-Distributed Service Layer(分布式服务层)
回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...
- 深入浅出“跨视图粒度计算”--3、EXCLUDE表达式
本文由 网易云发布. 深入嵌入“跨视图粒度计算”的前面两篇分别讲了 1.理解数据的粒度 2.INCLUDE表达式 这一篇讲一下EXCLUDE表达式的用法. EXCLUDE,中文译为“排除”,顾名思义 ...
- 面试题-一个列表向右移动k位
def sort(lst,k): length = len(lst) left =lst[:-k] right =lst[-k:] lst.clear() lst.extend(right) lst. ...