关于何为面剔除,很多博主已经介绍得很清晰了,就不重复介绍了(我懒):
OpenGL基础32:面剔除_Jaihk662的博客-CSDN博客
其实面剔除对于有效减少渲染时看不到的面消耗的算力很有帮助,但在程序还没做完之前打开可能会导致一些该显示的东西显示不出来
最近想做一个关于可以移动光源的光照模型,在以往的代码上随便复制组合一下打算搭建一个demo开始写相关代码,结果发现熟悉的三角形它没有显示出来……。
1、首先怀疑shader写得有问题。但没发现compile error。
2、怀疑是顶点设置有点问题,反复查引用过程,也没问题,顶点本身设定也没问题
3、再怀疑会不会是我的变换矩阵没写好?
然后我用最小系统法,把所有额外的东西去掉,甚至只是保留最简单的顶点和片元脚本:
#version 300 esin vec3 objectPosition; void main() {gl_Position = vec4(objectPosition, 1.0);
}
#version 300 es
precision highp float;
out vec4 fragColor;void main() {fragColor = vec4(0.0, 1.0, 1.0, 1.0);
}
这样基本上就等同于输入的顶点在没有任何变换的情况下,赋予这个三角形面每个一种藏青色(每个顶点都是同样的片元颜色)。
但居然还是什么都没显示,但是什么都没报错。
那基本脚本的问题也可以排除了。
那剩下的可能就是gl API调用方面的问题了。检查到最后,发现我粘贴的样本代码打开了:
GLES30.glEnable(GLES30.GL_CULL_FACE);
而我绘制顶点的顺序刚好就是它不会显示的那种,所以自然显示不出来了。关闭之后一切正常了。