OpenGL GL_EDGE_FLAG、GL_POLYGON_MODE、glPolygonMode组合使用将凹多边形切割成凸多边形绘制

1、虽然很多显卡已经底层支持凹多边形,但是仍然了解凸多边形组合成凹多边形

2、先保存原先的边角标志:开始绘制图多边形,因为是由两个凸多边形组合成一个凹多边形,所以第一个凸多边形的最后一条边留缺口,接着的凸多边形的开始边留缺口,这样子就能组合成凹多边形。原理:glEdgeFlag(GL_FALSE);标记从该顶点出发的边为非边界。这样子绘制的时候,从该顶点出发的线段不会绘制,只会绘制到达该顶点的边,简单点理解就是该顶点的显示边出度为0。

glPushAttrib(GL_EDGE_FLAG);
	glBegin(GL_POLYGON);

		glEdgeFlag(GL_TRUE);
		glVertex2f(250.0,250.0);
		glVertex2f(150.0,300.0);
		glVertex2f(200.0,150.0);
		glEdgeFlag(GL_FALSE);
		glVertex2f(300.0,150.0);

	glEnd();
	glPopAttrib();

	glPushAttrib(GL_EDGE_FLAG);
	glBegin(GL_POLYGON);
		glEdgeFlag(GL_FALSE);
		glVertex2f(250.0,250.0);
		glEdgeFlag(GL_TRUE);
		glVertex2f(300.0,150.0);
		glVertex2f(350.0,200.0);
		glVertex2f(300.0,270.0);

	glEnd();
	glPopAttrib();

3、用三角形去切割绘制:

为什么GL_TRIANGLE_STRIP的边界设置无效?

是不是只有多边形才支持边界设置?求帮忙

时间: 2024-11-05 14:53:13

OpenGL GL_EDGE_FLAG、GL_POLYGON_MODE、glPolygonMode组合使用将凹多边形切割成凸多边形绘制的相关文章

OpenGL学习进程(11)第八课:颜色绘制的详解

    本节是OpenGL学习的第八个课时,下面将详细介绍OpenGL的颜色模式,颜色混合以及抗锯齿.     (1)颜色模式: OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. RGBA模式与索引模式的区别: 计算机必须为每个像素保存一些数据,在RGBA模式中数据就代表了颜色:而颜色索引模式中数据代表了一个索引,要获取真正的颜色值还需要查索引表.数据的数量是由帧缓存中的位面决定的.一个位面为一个像素的一个位的数据.假如是8位面的颜色,每个像素就有8个颜色位,因此就有2的8次方

OpenGL学习进程(10)第七课:四边形绘制与动画基础

    本节是OpenGL学习的第七个课时,下面以四边形为例介绍绘制OpenGL动画的相关知识:     (1)绘制几种不同的四边形: 1)四边形(GL_QUADS) OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形. 注意:在使用四边形时必需记住四边形的四个角必须位于同一个平面中(不存在弯曲的四边形). 2)四边形带(GL_QUAD_STRIP) 该图元指定一个连接的四边形带.它们都保持相同方向的环绕. 3)通用多边形GL_POLYGON 我们可以用它绘制任意数

基于Qt的OpenGL可编程管线学习(3)- 使用Instanced方式绘制

绘制多个重复的模型时,使用Instanced方式绘制可以大大加快显然速度. 绘制效果如下图所示: 1.Vertex Shader中定义如下: attribute vec3 pos; attribute vec2 coord; attribute vec3 normal; attribute vec3 offset; uniform mat4 M; uniform mat4 V; uniform mat4 P; uniform mat4 NM; varying vec2 M_coord; vary

OpenGl学习进程(8)第六课:点、边和图形(三)绘制图形

本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识:     (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”.通过点.直线和多边形,就可以组合成各种几何图形.一段弧可以看成是是很多短的直线段相连,这些直线段足够短,以至于其长度小于一个像素的宽度.通过位于不同平面的相连的小多边形,还可以组成一个“曲面”. 什么是凸边形: 凸边形:多边形内任意两点所确定的线段都在多边形内,由此也可以推导出,凸多边形不能是空心的

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

opengl基础学习专题 (三) 多边形绘制的几种样式

题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向您致敬,愿您仍在天国 仍潇洒的思索着,奔跑着. 正文 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处. 例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. 这些问题将在本课中被解决. 下面就点.直

OpenGL笔记2.2 镂空

在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. 这些问题将在本课中被解决. 下面就点.直线.多边形分别讨论. 1.关于点 点的大小默认为1个像素,但也可以改变之.改变的命令为glPointSize,其函数原型如下: void glPointSize(GLfloat size); size必须大于0.0f,默认值为1.0f,单位为“像素”. 注

OpenGL理解

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

【OpenGL】OpenGL初学

转载自:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性