在默认情况下,填充多边形是用实心模式绘制的。此外,它们还可以使用一种32位×32位的窗口对齐的点画模式。glPolygonStipple()函数用于指定多边形的点画模式。

void glPolygonStipple(const GLubyte *mask);

定义填充多边形的当前点画模式。mask参数是一个指向32×32位图的指针,后者被解释为0和1的掩码。如果模式中出现的是1,那么多边形中对应的像素就被绘制;如果出现的是0,多边形中对应的像素就不被绘制。

下面通过一个绘制小强的Demo演示一下多边形的点画。

//
//  main.cpp
//  OpenGL_04_Polygon
//
//  Created by apple on 14/12/30.
//  Copyright (c) 2014年 cc. All rights reserved.
//#include <iostream>
#include <GLUT/GLUT.h>/***  初始化操作*/
void init() {glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置着色模式,GL_FLAT 采用恒定着色,使用图元中某个顶点的颜色来渲染整个图元。glShadeModel(GL_FLAT);
}/***  展示绘制效果*/
void display() {GLubyte fly[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60,0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20,0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20,0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22,0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC,0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30,0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0,0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0,0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30,0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08,0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08,0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08};GLubyte halftone[] = {0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55};//清理颜色缓冲区glClear(GL_COLOR_BUFFER_BIT);//设置绘制颜色(白)glColor3f(1.0, 1.0, 1.0);//1.绘制一个矩形(正方形),左侧glRectf(25.0, 25.0, 125.0, 125.0);//开启多边形点画模式glEnable(GL_POLYGON_STIPPLE);//2.通过点画模式绘制一个小强的矩形//小强矩形区域 32*32位glPolygonStipple (fly);//指定小强所在的矩形区域glRectf(125.0, 25.0, 225.0, 125.0);//3.通过点画绘制一张网图glPolygonStipple (halftone);//指定网图所在的矩形区域glRectf(225.0, 25.0, 325.0, 125.0);//关闭多边形点画模式glDisable(GL_POLYGON_STIPPLE);glFlush();}/***  调整窗口尺寸**  @param width  宽度*  @param height 高度*/
void reshape(int width, int height) {//设置视口矩形区域,在默认情况下,视口被设置为占据打开窗口的整个像素矩形glViewport(0, 0, (GLsizei)width, (GLsizei)height);//对投影矩阵应用随后的矩阵操作glMatrixMode(GL_PROJECTION);//等于是将之前矩阵变换导致变化过的栈顶矩阵重新归位,置为单位矩阵!等于是之前的矩阵变换带来的影响到此为止了!glLoadIdentity();//指定2D裁剪坐标系,naer和far使用默认值-1和1gluOrtho2D(0.0, (GLdouble)width, 0.0, (GLdouble)height);
}/***  键盘事件回调**  @param key 键位*  @param x   宽度*  @param y   高度*/
void keyboard(unsigned char key, int x, int y) {switch (key) {//ESCcase 27:exit(0);break;}
}int main(int argc, const char * argv[]) {//初始化GLUT库glutInit(&argc, (char**)argv);//设置双缓冲,RGB像素格式的窗口glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置窗口大小glutInitWindowSize(350, 150);//设置窗口坐标glutInitWindowPosition (100, 100);//创建窗口glutCreateWindow("Lines");//初始化操作init();//设置展示的回调方法glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);//绘制线程开始循环glutMainLoop();return 0;
}

本文由CC原创总结,如需转载请注明出处:http://blog.csdn.net/oktears/article/details/42264395

OpenGL学习05_点画模式(点画多边形)相关推荐

  1. OpenGL学习04_点画模式(点画线)

    viod glLineStipple(GLint factor,GLshort pattern); OpenGL中设置直线的当前点画模式.pattern参数是由1或0组成的16位序列,它们根据需要进行 ...

  2. 【OpenGL 学习笔记03】点画多边形

    1.点画多边形 //定义填充多边形的点画模式.mask为32 x 32 的位图指针,1画0不画,使用前必须启用多边形点画功能 void glPloygonStipple(const GLubyte* ...

  3. OpenGL学习之二 -- 初探

    OpenGL学习之二 -- 初探 前言 1. Xcode搭建OpenGL环境 1. 1 搭建步骤 1. 2 写一个最简单的openGL测试代码 1. 3 源码下载 2. 图形API简介 3. Open ...

  4. OpenGL学习-球体和phong光照模型

    OpenGL学习-球体和phong光照模型 开发环境搭建参考:https://lexiaoyuan.blog.csdn.net/article/details/120059213 通用配置步骤 Vis ...

  5. OpenGL学习之路13----相机控制(鼠标操作)

    代码放在github上 本文根据教程:ogldev进行扩充学习,一步步从零开始,记录学习历程 到目前为止,我们已经可以将一个物体以任意大小.任意角度和任意位置摆放在世界空间,相关博文链接: OpenG ...

  6. openGL学习之glut库的使用

    对于初学者来说,做小项目用的glut已经很足够了,它的定义是用于简单程序和初学者学习使用的简单的.容易的.小的. vs2015创建空项目: 然后在项目中添加glut中include路径: 先创建一个调 ...

  7. OpenGL学习-圆柱

    OpenGL学习-圆柱 开发环境搭建参考:https://lexiaoyuan.blog.csdn.net/article/details/120059213 通用配置步骤 Visual Studio ...

  8. 【我的OpenGL学习进阶之旅】OpenGL ES 3.0新功能

    目录 1.1 纹理 1.2 着色器 1.3 几何形状 1.4 缓冲区对象 1.5 帧缓冲区 OpenGL ES 2.0 开创了手持设备可编程着色器的时代,在驱动大量设备的游戏.应用程序和用户接口中获得 ...

  9. OpenGL 学习笔记 II:初始化 API,第一个黑窗,游戏循环和帧率,OpenGL 默认垂直同步,glfw 帧率

    前情提要: 上一篇: OpenGL 学习笔记 I:OpenGL glew glad glfw glut 的关系,OpenGL 状态机,现代操作系统的窗口管理器,OpenGL 窗口和上下文 OpenGL ...

最新文章

  1. jQuery带动画的弹出对话框
  2. ProGuard的返回错误代码1。异常的解决方法
  3. 对象比较:Comparable 和 Comparator
  4. 中国移动短信网关CMPP3.0 C#源代码:使用示例
  5. Go学习笔记07-结构体与方法
  6. 调制优缺点_钓鱼,何时用搓饵、何时用拉饵?及对应的优缺点分析
  7. delphi idtcpclient和idtcpserver的心跳包
  8. 【pytorch】常见的坑汇总
  9. weblogic11g 密码忘记肿么办?
  10. Java之java.lang.CloneNotSupportedException,Java中bean的克隆报错
  11. 免费响应式html模板,值得收藏的25款免费响应式网页模板
  12. http://www.cnblogs.com/qianmojing/p/6142178.html
  13. 计算机键盘卡扣原理,笔记本键盘怎么拆?笔记本键盘卡扣、排线如何打开?
  14. week_07_数据库,JDBC,Utils,Html中文本,超链接,表格,表单,框架,图像标签
  15. 笑话,随便笑不收费.
  16. java word 水印_java操作word水印
  17. html图像css设置大小,关于html:CSS显示调整大小和裁剪的图像
  18. java 纳秒 秒_如何使用TimeUnit枚举将纳秒转换为秒?
  19. 每周分享第 36 期
  20. vue3+vant开发微信公众号网页爬坑不完全指北

热门文章

  1. Cisco Firepower 9300 Series FTD Software 7.2.0 ASA Software 9.18.1
  2. [内存管理]内存池pool库
  3. Unity 3D项目 - 01 - 开始游戏主界面
  4. 如何建立Qt Creator交叉编译嵌入式Linux
  5. mysql乐观锁 秒杀_使用数据库乐观锁解决高并发秒杀问题,以及如何模拟高并发的场景,CyclicBarrier和CountDownLatch类的用法...
  6. ai建立使用图案_怎么用AI创建无缝拼贴图案样式 Illustrator创建无缝拼贴图案教程...
  7. 视频显示相关名词解释
  8. QingScan v1.1.0 版本发布会实录
  9. CMS-CMS框架解析
  10. 三维计算机动画制作软件是,三维影视动画制作软件