访问片段着色器内的重心坐标

Dan*_*nho 4 opengl glsl fragment-shader

在片段着色器中,值是自然插值的.例如,如果我有三个顶点,每个顶点都有一个颜色,第一个顶点是红色,第二个顶点是绿色,第三个是蓝色.如果我用它们渲染一个三角形,预期的结果就是普通的 三角形.

显然,OpenGL计算三角形内每个点的插值系数(a,b,c).有没有办法明确访问这些值,还是我需要计算三个顶点的片段坐标,并自己找到该点的重心坐标?我知道这是完全可行的,但我认为OpenGL可以提供一些东西.

Ret*_*adi 7

我不知道任何内置的重心坐标.但是你不应该在片段着色器中进行任何计算.

您可以将三角形顶点的重心坐标作为属性传递到顶点着色器中.3个顶点的属性值只是(1,0,0),(0,1,0)和(0,0,1).然后将属性值传递给片段着色器(使用varying传统OpenGL中的变量,out顶点着色器和in核心OpenGL中的片段着色器).然后,片段着色器接收的变量的值是片段的重心坐标.

这与通常将纹理坐标传递到顶点着色器的方式非常相似,并且它们将它们传递给片段着色器,片段着色器接收插值.

  • 我想补充一点,因为光栅化器在二维屏幕空间中工作,所以这将导致GL在光栅化期间计算的重心坐标.你得到的是相对于三角形的3D物体空间的重心坐标,由未来的未扭曲.如果你想要真正的屏幕空间重心坐标,你应该添加`noperspective`限定符.从问题中不清楚哪些是期望值. (3认同)
  • 对于复杂的网格,每个顶点是否需要三个“vec3”重心坐标?或者你能逃脱一个?如果是三个,那么你如何防止它们在不同但相邻的三角形之间发生冲突? (2认同)