美文网首页
OpenGL隐藏⾯消除解决⽅案

OpenGL隐藏⾯消除解决⽅案

作者: kennths | 来源:发表于2020-02-09 16:51 被阅读0次

    我们都知道,在OpenGL绘制立体图形的时候,因为没有定义好图形哪些面对观察者可见,哪些面对观察者不可见,然后它就会全部绘制出来,而由于光照的原因,一个立体图形就会出现绘制混乱的问题,而解决这种问题,我们通常用到隐藏面消除的方法。

    1.油画算法

        就是先绘制离观察者近的图形,再画距观察远的图形。这样近的总是显示在前,把后面的图形叠加的地方盖住,就不会产生混乱。但这种方法有弊端,如果是多个三角形绘制,这样会无法区分出哪些在前,哪些在后,也会出现混乱,所以这种方法是不推荐的。

    2.正背面剔除

        想象一下,如果是一个立体图形,在观察者的方向去看是不可能看到全部的面的,只能看到最多三个面,那么看不到的面为什么要去绘制呢,绘制是需要浪费性能的,把这块隐藏的面去掉绘制的过程,还能增加绘制的性能。

        OpenGL 可以做到检查所有正⾯面朝向观察者的⾯面,并渲染它们.从⽽而丢弃背⾯面朝向的⾯面. 这样可以 节约⽚片元着⾊色器器的性能。

        其实OpenGL是通过检查顶点数据来判断正反面的,OpenGL里面,逆时针的顶点绘制顺序是正面,顺时针的顶点绘制顺序是反面。再根据观察者的观察位置,在左在右也会影响到正反面的位置,所以是由顶点绘制顺序和观察者的位置共同决定的。

    相关文章

      网友评论

          本文标题:OpenGL隐藏⾯消除解决⽅案

          本文链接:https://www.haomeiwen.com/subject/cjhnxhtx.html