GLSL
文章平均质量分 72
林一鸣1991
互联网无边无际 技术知识浩如烟海,在这个产业我每天都在接触新的知识,不断冲击我的内心,让我兴奋不已。
我对技术学习充满了热情,我更需要探索一套有效的方法来学习,一些零碎的知识和灵感需要记录和整理。
在这里,我希望能从小到大,不断对自己的知识总结,提高表达能力。我热衷于知识的输入,但是却很少有机会输出,在这里,我希望改变。
Explaning things to others is the best way to learn.
偶尔会使用英语 但不敢保证没有错误:)
我希望与各位交流,衷心感谢你们的意见和批评。我会认真应对,今天重新开始。
林一鸣 2014年11月29日
展开
-
【GLSL教程】(五)卡通着色
引言卡通着色可能是最简单的非真实模式shader。它使用很少的颜色,通常是几种色调(tone),因此不同色调之间是突变的效果。下图显示的就是我们试图达到的效果:茶壶上的色调是通过角度的余弦值选择的,这个角度是指光线和面的法线之间的夹角角度。如果法线和光的夹角比较小,我们使用较亮的色调,随着夹角变大,逐步使用更暗的色调。换句话说,角度余弦值将决定色调的强度。在本教程中,我们先介绍逐顶转载 2012-04-11 19:58:53 · 949 阅读 · 0 评论 -
tutorial 3
Using Uniform Variables in Fragment Shaders:在片元着色器中使用一致变量在片元着色器中使用一致变量和在顶点着色器使用完全一样一样:一个简单的OGLSL片段着色器uniform vec3 myColor;void main (void){ gl_FragColor = vec4(myColor, 1翻译 2012-04-11 20:29:54 · 426 阅读 · 0 评论 -
tutorial 5
Per Fragment Lighting :逐片元光照在OGLSL中,你可以使用opengl 光照状态组件。实现预设的光照模型可以与标准OPENGL状态兼容。 使用光照状态:你可以使用所有的opengl光照状态和一些衍生的状态,下面的代码也可以在OGLSL说明书中找到。光源参数:你可以使用内置的一致变量 "gl_LightSource"在你的o翻译 2012-04-11 20:57:47 · 993 阅读 · 0 评论 -
GLSL第三版笔记1
The recent trend in graphics hardware has been to replace fixed functionality with programmability in areas that have grown exceedingly complex.Vertex processing involves the operations that occur原创 2012-04-12 20:22:41 · 947 阅读 · 0 评论 -
在OpenGL和GLSL之间传递变量
假设一个shader中使用了如下变量:[cpp] view plaincopyuniform float specIntensity; uniform vec4 specColor; uniform float t[2]; uniform vec4 colors[3]; 在OpenGL程序转载 2012-04-14 11:29:06 · 1240 阅读 · 0 评论 -
GLSL学习笔记
今天开始看第三章,中英双语的对比很累啊。。。。3.1首先先给出一对简单的着色器顶点着色器:#version 140// Global variables// uniform qualified variables are changed at most once per primitive每个图元最多改变一次uniform float CoolestTemp;uniform原创 2012-04-13 22:19:26 · 3718 阅读 · 0 评论 -
Shader快速复习:Per Pixel Lighting(逐像素光照)
Shader快速复习,巩固知识加强感觉。今天的内容是Per Pixel Lighting(逐像素光照)——ZwqXin.com抛开光线跟踪和辐射度算法,现在的实时渲染主要用的是GOURAUD模型和PHONG模型,粗俗地说,就是一个是顶点级别的一个是像素级别的,对应per vertex lighting和per pixel lighting。细节点说,就是一个是对顶点插值,一个是对法线插值。转载 2012-04-16 14:58:32 · 3073 阅读 · 1 评论 -
一组可用的逐像素光照着色器
顶点着色器:varying vec3 N;varying vec3 v;void main(void){ v = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); gl_Position = gl_ModelViewProjectionMatrix * gl原创 2012-04-21 19:11:18 · 1762 阅读 · 0 评论 -
GLSL逐个像素光照的问题(解决了,更新显卡驱动和GLEW就行了)
我采用了这组着色器,http://blog.csdn.net/hippig/article/details/7484931作用是使用逐像素光照,但是在实际的应用程序中却出现了错误的效果。使用逐个像素光照应该出现如第一图均匀的镜面高光。但在我的程序中没有出现镜面高光,旋转后发现只有壶把和壶嘴上有,这是为什么?代码如下:#incl原创 2012-04-24 15:35:55 · 2343 阅读 · 1 评论 -
如何学些GLSL
1.看一看GLSL的介绍http://nehe.gamedev.net/data/articles/article.asp?article=21文章的结尾有一些不错的推荐教程链接,也有一些建议值得看一看。2.阅读OpenGL Shading languae网上可以搜索到电子书, 是英文的,看起来比较慢,建议找本中文的节省时间。不过感觉这本书对于基本概念讲的比较清楚,但是实践转载 2012-04-11 19:43:43 · 1010 阅读 · 0 评论 -
【GLSL教程】(九)其他说明
法线矩阵在很多顶点shader中都用到了gl_NormalMatrix。这里将介绍这个矩阵是什么,以及它的作用。大部分计算是在视图空间内完成的,主要原因是光照的运算要放在这个空间内,否则一些依赖观察点坐标的效果,比如镜面反射光就很难实现。所以我们需要将法线变换到视图空间。变换一个顶点到视图空间的方法如下:[cpp] view plaincopy转载 2012-04-11 20:07:44 · 1607 阅读 · 0 评论 -
【GLSL教程】(八)纹理贴图
简单的纹理贴图(Simple Texture)为了在GLSL中应用纹理,我们需要访问每个顶点的纹理坐标。GLSL中提供了一些属性变量,每个纹理单元一个:[cpp] view plaincopyattribute vec4 gl_MultiTexCoord0; attribute vec4 gl_MultiTexCoord1; at转载 2012-04-11 20:06:50 · 1568 阅读 · 0 评论 -
GLSL TUTORIAL1 Loading, Compiling and Linking OGLSL Programs
边学习边翻译http://www.clockworkcoders.com/oglsl/上的文章,如果有错请指出。一个简单OGLSL例子缩放因素0.5 顶点着色器传入的X和Y分量,然后缩放后的顶点与模型视图投影矩阵想成。void main(void){ vec4 = gl_Vertex; AX = AX * 0.5; AY =翻译 2012-04-11 20:19:09 · 643 阅读 · 0 评论 -
tutorial 4
Varying Variables:易变变量易变变量在片元着色器和顶点着色器之间提供了一个传递的接口。顶点着色器计算每个顶点的值,片元着色器计算每个片元的值。如果你在一个顶点着色器中定义了一个易变变量,这个值会被内插值修正后(透视修正)插入在被渲染的原型中,你可以在片元着色器中使用这个值。OGLSL Example 顶点着色器v翻译 2012-04-11 20:45:05 · 566 阅读 · 0 评论 -
【GLSL教程】(一)图形流水线
这是一些列来自lighthouse3d的GLSL教程,非常适合入门。我将边学习边翻译该教程的内容,同时记录在这里,方便以后查询。流水线概述下图描述了一个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。一个固定流水线包括如下功能:顶点变换(Vertex Transformation)转载 2012-04-11 19:45:22 · 871 阅读 · 0 评论 -
tutorial 2
Uniform Variables: Communication between C++ and OGLSL Program一致变量是用来在顶点着色器或者片段着色器传输的。在你的着色器使用的'uniform'限定符声明变量,例如:uniform float myVar;一致变量是只读而且所有处理的顶点都有相同的值。你只能在你的C + +程翻译 2012-04-11 20:27:22 · 509 阅读 · 0 评论 -
【GLSL教程】(三)在OpenGL中向shader传递信息
引言一个OpenGL程序可以用多种方式和shader通信。注意这种通信是单向的,因为shader的输出只能是渲染到某些目标,比如颜色和深度缓存。OpenGL的部分状态可以被shader访问,因此程序改变OpenGL某些状态就可以与shader进行通信了。例如一个程序想把光的颜色传给shader,可以直接调用OpenGL接口,就像使用固定功能流水线时做的那样。不过,使用Ope转载 2012-04-11 19:57:45 · 9294 阅读 · 0 评论 -
【GLSL教程】(六)逐顶点的光照
引言在OpenGL中有三种类型的光:方向光(directional)、点光(point)、聚光(spotlight)。本教程将从方向光讲起,首先我们将使用GLSL来模仿OpenGL中的光。我们将向shader中逐渐添加环境光、散射光和高光效果。后面的教程中我们将使用逐像素光照以获得更好的效果。接下来我们将实现逐像素的点光和聚光。这些内容与方向光很相近转载 2012-04-11 20:00:15 · 956 阅读 · 0 评论 -
【GLSL教程】(七)逐像素的光照
逐像素的方向光(Directional Light per Pixel)这一节将把前面的shader代码改为逐像素计算的方向光。我们需要将工作按照两个shader拆分,以确定哪些是需要逐像素操作的。首先看看每个顶点接收到的信息:•法线•半向量•光源方向我们需要将法线变换到视点空间然后归一化。我们还需要将半向量和光源方向也归一化,不过它们已经位于视点空间中了。这些归一化之后的转载 2012-04-11 20:01:47 · 1036 阅读 · 0 评论 -
在使用GLSL程序时出现:应用程序无法正常启动0xc000007b
方法1:安装最新的DirectX,或者用修复工具repair一下 方法2:重新安装glew32.lib, 64位系统:glew.dll放入C:\Windows\SysWOW64原创 2012-08-16 15:24:09 · 3655 阅读 · 2 评论