目前,我正在Android上使用OpenGL ES 2.0,我发现为每个顶点甚至每个片段存储法线向量是一种非常昂贵的解决方案(在我的例子中)。我想确定在碎片着色器中三角形的朝向方向,只有顶点的位置属性(如果有帮助的话,还有UV坐标)。有没有办法实现这一点?据我所知,OpenGL知道三角形的缠绕顺序,并且在渲染时利用它,但是,我没有找到任何解决方案来接收这些信息。
发布于 2015-07-15 13:41:07
是的,这里有一个内置变量。它名为gl_FrontFacing,类型为bool。
例如,如果您想将前面面向三角形的颜色涂成黄色,背面面向三角形的青色,您可以在碎片着色器中使用以下内容:
if (gl_FrontFacing) {
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
} else {
gl_FragColor = vec4(0.0, 1.0, 1.0, 1.0);
}发布于 2015-07-15 07:47:15
OpenGL使用卷绕顺序来确定三角形的朝向,这样当裁剪被启用时,看不见的面孔根本不会被光栅化。但是,顶点着色器是为每个顶点运行的,而且由于GPU的并行特性,您无法访问其他顶点。
使用几何着色器可以访问同一原语中的其他顶点。如果我没有弄错的话,它可以作为OpenGL ES 3.1的扩展,但以前没有。
https://stackoverflow.com/questions/31415178
复制相似问题