建立一个三角锥并分析正反面

三角锥的建立:选取顶点(0.0f, 0.0f, 75.0f),其他顶点按照角度不断旋转生成即可。为了效果更明显,每绘制一个三角形改变一下颜色,并且着色模式选择GL_FLAT(默认为GL_SMOOTH).

三角锥底部的“封口”:以原点(0.0f,0.0f,0.0f)为中心,旋转角度建立一个三角扇即可。为了突出效果,同样每绘制一个三角形改变一下color。

三角锥正反面的区分(褐色背景是错误解析):三角扇以CCW为正,角度也是按照CCW增加的,设想一下:站在顶点(0.0f,0.0f,75.0f),开始绘制三角扇了。先连一个angle为0的点,再连到一个angle为2的点(逆时针哦),那么现在如果我们“跳下”塔尖,站在三角锥的外面看刚才绘制顶点的顺序,会发现:是顺时针(CW)的!这就说明,默认情况下,三角锥内部是正面,这肯定不符合咱们的本意啊。  

  同样的方法,当我们站在中心(0.0f,0.0f,0.0f)绘制底部的时候,如果我们“跳出”三角锥内部,站在三角锥底部正下方的位置“仰视”三角锥“底盖”的时候,会发现我们绘制的顶点顺序是顺时针的!后来证明我这里的思路是错的,实际上从最后图形的旋转可以发现“底盖”的下面是CCW的,如果指定CW为正面的话,那么底盖下面是反面。所以才有这种效果:

  (一天后,补上)现在,好像明白了,绘制图形的场景应该是这样的:你站在锥尖(0.0f,0.0f,75.0f),然后逆时针绘制各个顶点--其实这时候你是站在椎体外面的(说不出理由,这样就能说通了),所以椎体外表面是CCW的,同样的道理,底盘的上面是CCW的。即,如果默认的话(CCW为正面),那么如果cull背面,就会出现上图的效果。

  还有一个不解的地方:怎么程序运行起来后,你看到的是“底盖”,而不是锥尖?(锥尖肯定离你眼睛更近啊)

  所以,我们必须指定顺时针的为正面: glFrontFace(GL_CW).

另外,如果有深度的图形,一定要开启深度测试。否则远近的图形互相叠加,效果很烂。

 

posted @ 2013-04-01 17:19  Tup  阅读(530)  评论(0)    收藏  举报