黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks

The vertex shader processes incoming data from the client, applying transformations, or doing other types of math to calculate lighting effects, displacement, color values, and so on. To render a triangle with three vertices, the vertex shader is executed three times, once for each vertex. On today’s hardware, there are multiple execution units running simulta-neously, which means all three vertices are processed simultaneously. Graphics processors today are massively parallel computers. Don’t be fooled by clock speed when comparing them to CPUs. They are orders of magnitude faster at graphics operations.
顶点处理器负责运行顶点着色器。顶点着色器的输入为顶点数据,也就是它的位置、颜色和法线等,这取决于OpenGL应用程序的发送。

下面的OpenGL代码为每个顶点向顶点处理器发送了一个颜色和一个顶点位置信息。

1 glBegin ();  
2     glColor3f (0.2,0.4,0.6);  
3     glVertex3f (-1.0,1.0,2.0);  
4     glColor3f (0.2,0.4,0.8);  
5     glVertex3f (1.0,-1.0,2.0);  
6 glEnd (); 

 

在一个顶点着色器中,你可以编写代码用于完成如下任务:

  • 使用模型视图和投影矩阵进行顶点位置变换
  • 法线变换,如果需要,还有法线的标准化
  • 纹理坐标生成和变换
  • 每个顶点的光照或为每个像素计算光照值
  • 颜色计算

并没有要求你的着色器执行上面的所有操作,例如你的应用程序可能不使用光照。尽管如此,一旦你编写了一个顶点着色器并且用于替换顶点处理器的全部功能,那么你就不能执行法线变换,不能期望固定功能执行纹理坐标生成。当使用顶点着色器后,那么它负责管线中本阶段的所有功能。

在前一小节,我们了解到顶点处理器并没有关于顶点的连接信息,因为需要拓扑信息的操作不能在顶点着色器中进行。例如顶点着色器不可能执行背面剔除操作,因为顶点处理器处理的是顶点而不是面。顶点处理器孤立地处理每个顶点,处理每个顶点时,并不需要其他顶点的信息。

顶点着色器至少负责写一个变量:gl_Position,通常是使用模型视图和投影矩阵变换顶点。

顶点着色器能够访问OpenGL状态,因此它能够执行光照,使用材料等操作。它还能够访问纹理(只在最新的硬件上可用)。但是它不能够访问帧缓冲区。


散射光照:散射光照方程:Cdiff=   max{N•L,0}*Cmat*Cli

posted on 2011-11-18 20:09 情绝格调(fresmaster) 阅读(365) 评论(0)  编辑 收藏 引用 所属分类: Graphics

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理