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:
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
• 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.
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
• 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.
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.
texture memory an arbitrary number of times and combine in arbitrary
ways the values that it reads.
可以在片元着色器中实现ray-casting算法 ,

918

被折叠的 条评论
为什么被折叠?



