OpenGL 笔记(三) 图元的属性 - 填充区、反走样、属性相关


填充区属性

主要介绍

OpenGL仅提供对凸多边形的填充区子程序。

  1. 定义填充图案
  2. 引用多边形填充子程序
  3. 激活OpenGL填充特性
  4. 描述要填充的多边形

建立掩模 - 1表示对应像素设置为当前颜色,0表示不变。(这里表示为fillPattern数组)
1. glPolygonStipple(fillPattern);
2. glEnable(GL_POLYGON_SYIPPLE);//disable关闭
有一点就是默认凸边形绘制是实心颜色区域。

http://blog.csdn.net/frankcreen/article/details/8087981
一个例子

插值

glShadeMOde(GL_SMOOTH);
接下来如果一个多边形顶点设置不同的参数的时候,会进行插值(目测线性- -)
如果改为GL_FLAT的话就按最后一个算了。

关于线框图

之前的那个例子的建立基础就是 - 画的正方形是一个实心的区域。
那就好像正常的画图软件一样,也可以把边和里面分来开画啦

glPolygonMode(face, displayMode);
face - GL_FRONT之类
displayMode - GL_LINE \ GL_POINT \ GL_FILL

然后接下来是,说线和面的深度计算算法有不一样所以,可以用另外的算法去移动填充的深度
感觉图形学涉及到的修正这种还蛮多的- -

然后有两种消除方法
- 1
glEnable(GL_POLYGON_OFFSET_FILL);//也可以移动点
glPolygonOffset(factor1, factor2);
深度偏移是,depthOffset = factor1 * 最大斜率 + factor2 * 常数;
常取 glPolygonOffset(0.75, 1.0);
- 2
限制模板缓存= = 没给例子我也看不太懂

然后以上其实我没太懂- - 因为没告诉我具体的算法所以有点难以接受(也可能是对图形学的理解还不够深)可能对我来说那个偏移修正没有传入参数我会觉得安全一点(这想法很危险=)

还有就是去除部分边(比如只显示几条边这种,对于凹凸边形比较多)
glEdgeFlag(GL_FALSE);
这个函数好像和我的想象调用位置不一样(在你想要的那条边的前面)(我觉得好理解一点的话应该要在中间?不过可能涉及到多边形的绘制了)

关于前向面

glFrontFace(vertexOrder);//GL_CW & GL_CCW(默认)
默认里,逆时针是前向面,顺时针是后向。


反走样

glEnable (primitiveType); //GL_POINT_SMOOTH GL_LINE_SMOOTH GL_POKYGON_SMOOTH

如果使用RGBAd话需要
glEnable(GL_BLEND);
然后用glBlendFunc(…)来指定调和方法


查询函数

glGet..
比如获得RGBA浮点颜色
glGetFloatv (GL_CURRENT_COLOR, colorValues);
colorValues是float类型的数组
GL_POINT_SIZE /GL_LINE_WIDTH /GL_CURRENT_PASTER_POSITION….


属性组

属性和其他状态按属性组进行组织,比如线属性组包含和线有关的各种信息,比如宽度、模板状态、图案、模板重复计数等等。可以在堆栈里对其进行存储。

服务器属性栈 serber attribute stack

glPushAttrib(attrGroup);//GL_POINT_BIT\GL_LINE_BIT\GL_POLYGON_BIT\GL_ALL_ATTRIB_BITS
对应glPopAttrib();

客户属性栈 client attribute stack

glPushClientAttrib & glPopCliebtAttrib
- 像素存储器模式 - 字节对齐信息 & 存储显示中子图的数组类型
- 顶点数组 - 当前顶点数组状态的信息 比如各个数组的激活、停止状态

posted @ 2017-08-29 11:17  BirdyC  阅读(480)  评论(0)    收藏  举报