顶点 (电脑图学)

电脑图学中,顶点是储存一系列基本绘图所需属性的基本元素,例如二维或三维空间中的点、或曲面上的多个点。在著色器中,与顶点相连的元素称为图元,图元内部应上色的区域称为片段,顶点的集合称为顶点组或顶点阵列。[1]而在OpenGL中,顶点预设会包含位置、法向量、颜色、第二色彩、纹理座标等属性[2],而其可以透过著色器编程添加更多属性。

图中的顶点包含了颜色资讯,分别为红、绿、蓝,通过渲染流程后会输出一个渐变色彩的三角形。

与几何学的关联

编辑

电脑图学中,三维模型通常会表示为以三角形构成的多面体,其中,顶点所包含的资讯不像几何学中只含有座标资讯,而会额外地包含其渲染所需的资讯,如颜色、反射特性、纹理和表面法线等[3]。电脑图学中的顶点同样可以如同几何学构造与顶点相连的边,然而多边形并非由多个边组成的封闭结构,而是多个顶点依序围出的结构,并构成面,而以上组合在电脑图学中有一个专有名词,称为图元。

应用于三维模型

编辑
 
图中右侧可以理解为使用原始顶点资讯绘制出的斯坦福兔子图象,而左侧是透过顶点所提供的渲染资讯内插产生的结果

在电脑图学中,一般的三维模型通常可以通过曲面细分将非三角形曲面转换为三角形阵列。而三维模型通常是透过在图元上依据顶点性质内插出资料以渲染出最后的立体。[4]

顶点属性

编辑

在电脑图学中,三角形多边形的顶点不仅与空间位置相关联,而且也需要提供正确渲染物件所需的其他值或关联资讯。这些资讯称为顶点属性(Vertex attributes)。顶点的大多数属性表示渲染所需的空间向量。这些向量通常可能是一维(x)、二维(x,y)或三维(x,y,z)的向量,并会包含一个齐次座标的维度(w)。这些值通常可以代表要绘制的物件之材质(material)的描述。这些数据通常会在顶点著色器或顶点处理流程中被使用。[4]

常见的顶点属性包括:

顶点位置
对应到二维或三维空间的顶点位置资讯[2]
顶点颜色
通常为镜面反射或漫反射的颜色值,表示物体的表面颜色或预先计算的照明资讯。一般以RGB色彩空间表示。[2]
反射率
例如顶点所处表面的镜面指数、金属度、菲涅耳值等资讯。[5]
纹理座标
用于决定如何将纹理正确渲染所需的座标值。[2]
法向量
法向量可以用于定义了顶点位置处近似曲面[6][7],用于光照计算(例如Phong著色法[8][9]、法线贴图、位移贴图以及控制曲面细分。[2]
切线向量
与法向量垂直的向量,用于部分的法线贴图、位移贴图以及控制曲面细分。[10]
骨架权重
储存用于绘制骨骼动画所需的资讯。[11]

用途

编辑

顶点包含的资料通常是提供渲染物件所需。在早期版本的OpenGL中,顶点能包含的资料种类是固定的,并且要在起始函数的呼叫以及终止函数的呼叫之间依序传入每个顶点的资料,在OpenGL 1.0中起始函数为glBegin、终止函数为glEnd[12]。最初电脑图学中的顶点定义与几何学类似,只包含空间位置资讯,并且要透过glVertex传入资料[13]。颜色参数是额外的一个状态变数,指定一次后后续会沿用先前最后一次给定的颜色[14]。关于其他的顶点属性则是要在每个顶点定义glVertex之前给出[15]。而后来出现了著色器的概念[16],使得顶点定义能够直接被程式开发人员决定。顶点的各项属性被依序存入缓冲器中,并且输入到顶点著色器中,顶点著色器中定义的每一个被标记为attribute的变数都是一个顶点的属性,透过客制化这些属性可以让一些较复杂的演算法跟随渲染流程一同完成,例如等值立方搜寻演算法英语Marching cubes[17]

参见

编辑

参考文献

编辑
  1. ^ Tomas Akenine-Möller, Eric Haines, Naty Hoffman. Real-Time Rendering. CRC Press. 2016. ISBN 9781498785631. LCCN 2008011580. 
  2. ^ 2.0 2.1 2.2 2.3 2.4 Andrew Garrard. Khronos Data Format Specification (PDF). Khronos Group. 2019-03-31 [2019-09-16]. (原始内容存档 (PDF)于2022-04-19). 
  3. ^ Christen, Martin. Clockworkcoders Tutorials: Vertex Attributes. Khronos Group. [26 January 2009]. (原始内容存档于2019-04-12). 
  4. ^ 4.0 4.1 Vertex Shader Introduction (PDF). nvidia. [2019-09-16]. (原始内容存档 (PDF)于2021-07-28). 
  5. ^ Tan, Ping and Lin, Stephen and Quan, Long and Guo, Baining and Shum, Heung-Yeung, Multiresolution Reflectance Filtering., Rendering Techniques, 2005: 111––116 
  6. ^ RCA Corporation. RCA Electro-optics Handbook. RCA solid State. RCA/Commercial Engineering. 1974: p.18 ff [2021-07-16]. LCCN 75318901. (原始内容存档于2022-05-31). 
  7. ^ Warren J. Smith. Modern optical engineering. McGraw-Hill. 1966: p.228, 256. 
  8. ^ Watt, Alan H.; Watt, Mark. Advanced Animation and Rendering Techniques: Theory and Practice. Addison-Wesley Professional. 1992: 21–26. ISBN 978-0-201-54412-1. 
  9. ^ Foley, James D.; van Dam, Andries; Feiner, Steven K.; Hughes, John F. Computer Graphics: Principles and Practice. (2nd ed. in C). Addison-Wesley Publishing Company. 1996: 738–739. ISBN 0-201-84840-6. 
  10. ^ Habel, Ralf and Wimmer, Michael, Efficient irradiance normal mapping, Proceedings of the 2010 ACM SIGGRAPH symposium on Interactive 3D Graphics and Games (ACM), 2010: 189––195 
  11. ^ Jacobson, Alec and Sorkine, Olga, Stretchable and twistable bones for skeletal shape deformation, ACM Transactions on Graphics (TOG) 30 (6) (ACM), 2011, 30 (6): 165 
  12. ^ Martz, P. OpenGL Distilled. OpenGL. Pearson Education. 2006: 38. ISBN 9780132701785. 
  13. ^ Bailey, M. and Cunningham, S. Graphics Shaders: Theory and Practice, Second Edition. CRC Press. 2016. ISBN 9781439867754. LCCN 2011031720. 
  14. ^ Guha, S. Computer Graphics Through OpenGL: From Theory to Experiments. CRC Press. 2014. ISBN 9781482258400. 
  15. ^ Shreiner, D. and Group, B.T.K.O.G.L.A.R.B.W. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Versions 3.0 and 3.1. Pearson Education. 2009. ISBN 9780321669278. 
  16. ^ The RenderMan Interface Specification. (原始内容存档于2019-06-16). 
  17. ^ Goetz, Frank and Junklewitz, Theodor and Domik, Gitta, Real-Time Marching Cubes on the Vertex Shader., Eurographics (Short Presentations), 2005: 5––8