Skip to content

关于顶点着色器和片段着色器的实现 #2

Description

@KKKKKaoriiiii

对于图像渲染管线来说,流行的图像引擎总是会经过:
顶点着色器->几何着色器->形状匹配->光栅化->片段着色器->测试混合

对于顶点着色器来说,常见的顶点属性主要包括:

  • 顶点位置,
  • 反射率,
  • 法向量,
  • 切线向量。

其中大部分属性是用于光渲染的,需要计算顶点的弧面弧度。虽然对于我们的任务来说,我们的色彩范围很差,所以一般不考虑复杂的光渲染,所以其实我们可以将顶点着色器和片段着色器合并。即直接将多边形光栅化并根据着色器的输入选择填色方案。
(此外,对于顶点我们应该保留切线向量或者法向量的属性,以用于绘制圆弧,这个可以在后期实现。)

此外,所有的顶点坐标在定义的时候就被要求归一化到0~1,我们似乎不需要对每一个顶点数组都赋予长和宽的属性,我们只需要读取对象的的顶点坐标,以及读取当前缓冲区的大小(我需要写一个函数可以返回当前屏幕的长宽,用于匹配缓冲区的大小),然后将坐标等比例放缩到缓冲区上。即根据终端返回的输出策略(居中,拉伸等)将图像直接打印到缓冲区。

也就是说我们在定义顶点的时候就已经包含了它的相对位置,所有的顶点和顶点数组都不需要所谓的长,宽以及图形位置的属性。只有在面向用户的时候保留长、宽以及图形位置,用于用户直接定义矩形框或者等边三角形等基本形状。

综上所述,我们应该把着色器的方法写于离屏缓冲区(即画布)中,直接对缓冲区进行直接着色。既将步骤简化为:
光栅化->片段着色器

光栅化的作用主要是将坐标映射到缓冲区上,片段着色器绘制边框和填色,因此也不需要单独定义顶点着色器,算是对于简单图像引擎的结构优化。

以上是对于着色渲染的简化建议,如果有什么不妥的也可以提出其他建议和补充。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requesthelp wantedExtra attention is needed

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions