设为首页 加入收藏

TOP

OpenGL超级宝典学习笔记——其他图元
2015-02-25 22:43:37 来源: 作者: 【 】 浏览:26
Tags:OpenGL 超级 宝典 学习 笔记 其他

OpenGL的GL_QUADS图元,可以指定4个点画出四边形。这些多边形具有顺时针环绕的方向。PS:四边形的四个角必须位于同一个平面


GL_QUADS_STRIP图元可以画四边形带。


image


image


GL_POLYGONS可以使用指定的所有点绘制一个多边形。PS:这些点必须在一个平面上


开启点画模式


glEnagle(GL_POLYGON_STIPPLE);


设置填充的模型


glPolygonStipple(pBitmap);


pBitmap指定了一块数据区域。然后多边形就使用pBitmap(GLubyte*)所指定的模式进行填充。pBitmap指向的缓冲区是32*32的位模式。首先读入的是最高有效位(MSB)这与点画的方式刚好相反。


image


一个多边形的点画模式,篝火的图像。这个篝火图像的数据用32*32的数组存储


// Bitmap of campfire
GLubyte fire[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x01, 0xf0,
0x00, 0x00, 0x07, 0xf0, 0x0f, 0x00, 0x1f, 0xe0,
0x1f, 0x80, 0x1f, 0xc0, 0x0f, 0xc0, 0x3f, 0x80,
0x07, 0xe0, 0x7e, 0x00, 0x03, 0xf0, 0xff, 0x80,
0x03, 0xf5, 0xff, 0xe0, 0x07, 0xfd, 0xff, 0xf8,
0x1f, 0xfc, 0xff, 0xe8, 0xff, 0xe3, 0xbf, 0x70,
0xde, 0x80, 0xb7, 0x00, 0x71, 0x10, 0x4a, 0x80,
0x03, 0x10, 0x4e, 0x40, 0x02, 0x88, 0x8c, 0x20,
0x05, 0x05, 0x04, 0x40, 0x02, 0x82, 0x14, 0x40,
0x02, 0x40, 0x10, 0x80, 0x02, 0x64, 0x1a, 0x80,
0x00, 0x92, 0x29, 0x00, 0x00, 0xb0, 0x48, 0x00,
0x00, 0xc8, 0x90, 0x00, 0x00, 0x85, 0x10, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00 };


数组的第一行存储的是图像最后一行的数据,数组的最后一行存储的是图像的第一行数据。点画模式只能用于简单的多边形填充,因为其不会随多边形的变换而变换。示例如下


image


源码:https://github.com/sweetdark/openglex/tree/master/polygon


多边形的创建规则:多边形不能被扭曲,边也不能交叉。指定的一个多边形的顶点必须在一个面上。多边形必须是凸多边形。


image


image


直接画凹多边形在OpenGL中是非法的,但可以使用多个多边形的拼接来实现绘制凹多边形。当我们使用填充模式的时候,看不出这些由多个多边形拼接起来的凹多边形的内部线条。但是当我们使用多边形画线模式glPolygonMode(GL_FRONT, GL_LINE)的时候会出现这些内部的线。此时我们可以通过OpenGL提供的glEdageFlag()来处理这些边的问题。当这个函数接受true值时,接下来的顶点都将作为多边形边界线的起点。例子:


bFlag=true和bFlag=false的区别:


imageimage


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL超级宝典学习笔记——画三.. 下一篇OpenGL超级宝典学习笔记——其他..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: