OpenGL学习笔记

1、OpenGL填充图案函数
1、创建掩模 fillPattern
2、设定掩模为当前填充图案
glPlygonStipple(fillPattern)
3、激活填充子程序
glEnable(GL_POLYGON_STIPPLE)
2、纹理和插值图案
填充多边形有两种基本方法:
1、纹理。
主要指material,我的理解是图案的拉伸覆盖。
2、插值填充。
方法:对多边形的顶点设定不同颜色,在GL_SMOOTH模式下默认插值填充。
用处:在各种光照条件下更加真实地着色多边形表面。
代码:interpolationGraph(void)

3、线框图方法
仅显示多边形的边
glPolygonMode(face,displayMode)
face:GL_FRONT,GL_BACK,GL_FRONT_AND_BACK
displayMode:GL_LINE,GL_POINT
Q1:我想让多边形填充颜色并且显示边
A1:通过指定多边形两次来实现。第一次绘制一个内部填充颜色的多边形,第二次绘制多边形的边,具体见”带边线的实心三角形.cpp”。

缝线的产生
    产生原因:扫描线填充算法和边绘制算法的差异。具体而言是深度值的计算差异。
    对应措施:
        1、(别画框线)可见性测试时用内部填充色来显示多边形边界
        2、调整填充算法计算得到的深度值,使得与边线算法得到的深度值不同
            glEnable(GL_POLYGON_OFFSET_FILL);
            glPolygonOffset(factor1,factor2); // 这俩参数的值来自经验
            当然也可以调整边线的深度值:GL_POLYGON_OFFSET_LINE
        3、使用模板缓存来限制填充算法(不推荐)。
Q2:如何显示一个凹多边形
A2:(1)分割成一组三角形,(2)填充三角形

消除选定边的机制
    glEdgeFlag(flag); // GL_TRUE|GL_FALSE;作用于之后的顶点
    多边形的顶点有一个flag,用于表明是否与下一个顶点相连。

4、前向面函数
默认情况下多边形面的朝向由顶点次序决定,但可以通过函数指定
glFrontFace(vertexOrder);
GL_CW 表示随后定义的顺时针多边形为前向面
GL_CCW 则相反