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 at each vertex, most notably transformation and lighting. Fragments are per-pixel data structures that are created by the rasterization of graphics primitives. A fragment contains all the data necessary to update a single location in the framebuffer. Fragment processing consists of the operations that occur on a per-fragment basis, most notably reading from texture memory and applying the texture value(s) at each fragment.

But if you have ever been frustrated because OpenGL did not allow you to define area lights or because lighting calculations are performed per-vertex rather than per-fragment or, if you have run into any of the many limitations of the traditional OpenGL rendering model, you may need to write your own OpenGL shader.

Here’s a brief 
list of what’s possible with OpenGL shaders:
• Increasingly realistic materials—metals, stone, wood, paints, and so on
• Increasingly realistic lighting effects—area lights, soft shadows, and 
so on
• Natural phenomena—fire, smoke, water, clouds, and so on
• Advanced rendering effects—global illumination, ray-tracing, and 
so on
• Nonphotorealistic materials—painterly effects, pen-and-ink drawings, 
simulation of illustration techniques, and so on
• New uses for texture memory—storage of normals, gloss values, poly-
nomial coefficients, and so on
• Procedural textures—dynamically generated 2D and 3D textures, not 
static texture images
• Image processing—convolution, unsharp masking, complex blending, 
and so on
• Animation effects—key frame interpolation, particle systems, proce-
durally defined motion
• User programmable antialiasing methods
• General computation—sorting, mathematical modeling, fluid 
dynamics, and so on


可见,顶点处理器需要将坐标和投影矩阵相乘变换到裁剪空间后才能传入片元处理器


顶点处理器:

 Vertex shaders must compute 
            the homogeneous position of the coordinate in clip space and store the 
            result in the special output variable gl_Position. Values to be used during 
            user clipping and point rasterization can be stored in the special output 
            variables gl_ClipDistances and gl_PointSize. 

片元着色器:
功能:
• Operations on interpolated values
• Texture access
• Texture application
•Fog
•Color sum
•Alpha Test
注意新版中,片元着色器已经可以执行alpha测试操作和点画操作了

The point sprite coordinate position of the fragment is communicated through the special input 
variable: gl_PointCoord.

One of the biggest advantages of the fragment processor is that it can access 
texture memory an arbitrary number of times and combine in arbitrary 
ways the values that it reads. 

Global variables that define data that is passed from the fragment processor 
to the fixed-function per-fragment pipeline are called OUT VARIABLES.
Another OpenGL command, glBindFragDataLocation, allows an application 
to tie together the user-defined out variable to an index of a drawbuffer.






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值