首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在OpenGL中绘制凹多边形

在OpenGL中绘制凹多边形,可以使用三角形剖分的方法将凹多边形转换为多个三角形进行绘制。以下是一种简单的实现方法:

  1. 定义多边形的顶点坐标数组,例如:GLfloat vertices[] = { x1, y1, x2, y2, x3, y3, ... };GLuint indices[] = { 0, 1, 2, 2, 3, 4, ... };glVertexPointer(2, GL_FLOAT, 0, vertices); glEnableClientState(GL_VERTEX_ARRAY); glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices); glDisableClientState(GL_VERTEX_ARRAY);这样就可以绘制出一个凹多边形。需要注意的是,如果多边形的顶点顺序不符合右手法则,可能会出现多边形内部被剔除的情况,可以通过调整顶点顺序来解决。
  2. 定义多边形的顶点索引数组,例如:
  3. 使用glDrawElements函数绘制多边形,例如:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenGL】十八、OpenGL 绘制多边形 ( 绘制 GL_POLYGON 模式多边形 )

文章目录 一、绘制 GL_POLYGON 模式多边形 二、多边形绘制顺序分析 三、相关资源 一、绘制 GL_POLYGON 模式多边形 ---- 使用 glBegin(GL_POLYGON) 设置绘制多边形..., 不管有几个点 , 都按照指定的顺序连接起来 ; 注意 : 这些点组成的多边形必须是凸多边形 , 不能是多边形 ; 代码示例 : // 只显示正面 , 不显示背面 //glEnable(GL_CULL_FACE...glEnd(); // 将后缓冲区绘制到前台 SwapBuffers(dc); } 绘制效果 : 二、多边形绘制顺序分析 ---- glBegin 和 glEnd 之间设置了...6 个点 , 分别在图中标号 , 绘制顺序按照 1 \to 2 \to 3 \to 4 \to 5 \to 6 \to 1 顺序连接起来 , 最终画出了如下多边形 ; // 绘制多边形...glEnd(); 三、相关资源 ---- GitHub 地址 : https://github.com/han1202012/OpenGL ( GitHub 源码始终都会随着后续博客的进度更新覆盖

2.8K00

OSG绘制空间多边形并计算其面积

思路 这个问题其实涉及到OSG的两个问题:多边形分格化和几何图元遍历。 1) 多边形分格化 OpenGL/OSG,由于效率的原因,默认是直接显示的简单的凸多边形。...如果直接强行显示多边形,渲染结果是不确定的。所以对于复杂的多边形,需要将其分解成简单的凸多边形,这个过程就是多边形分格化。...OSG是通过osgUtil::Tessellator类来实现多边形分格化的。 2) 几何图元遍历 对于二维的多边形,可以有办法计算其面积。但是对于三维空间的多边形,计算其面积却很困难。...而我们知道,任何复杂的图形都是通过分解成三角形进行绘制的,只要获取分解成的三角形,计算其面积并相加(空间三角形的面积计算比较简单),就可以得到多边形的总面积。...参考 OSG学习笔记(三)之如何将非三角面转换为三角面 osg几何体的图元的遍历 OSG计算并绘制模型每一个三角面片的法向量 OSG(OpenSceneGraph)基础学习9:OSG多边形分格化

1.4K40

技巧 | OpenCV如何绘制与填充多边形

很多人都问过我这个问题,OpenCV是怎么绘制与填充多边形的,特别是填充多边形的。因为根据OpenCV多边形绘制函数,他们发现这是一个无解的问题。...其实我2017底做一个项目的时候当时会对得到的一个多边形边缘轮廓进行填充,我就发现OpenCV多边形绘制函数无法填充,但是其实换个函数就会顺利搞定,只是大家被OpenCV官方的教程误导思维定势,没有想到而已...下面我们就来详细说一下,OpenCV多边形绘制与填充问题。...填充多边形 OpenCV可以完成多边形填充的函数有两个,第一个填充多边形的函数为: void cv::fillPoly( InputOutputArray img,...只是输入的时候需要适当改一下。参数controus表示的多个多边形点集合,contourIdx大于零表示绘制指定索引的轮廓,-1表示绘制全部,thickness正数表示绘制,非正数表示填充。

3.4K20

php判断坐标是否指定的多边形

如何判断一个坐标点是否一个多边形,具体的应用场景就是,外卖派送,用户提供的坐标是否是在外卖的派送范围之内。...用户的坐标可以通过手机设备获取到,派送范围就是通过地图上,进行多边形绘制,获取多个坐标点连接起来的配送范围。下面来看看代码上是如何简单判断的。.../vendor/autoload.php'; //引入两个类 use Location\Coordinate; use Location\Polygon; //绘制一个多边形 $geo = new...两个坐标做测试 $a = new Coordinate(39.916527, 116.397128); $b = new Coordinate(39.901305, 116.397128); //判断是否执行的多边形...if ($geo->contains($b)) { echo "b点在多边形的范围内"; } else { echo "b点不在多边形的范围内"; } 结果: ?

1.5K20

OpenGL(六)-- 渲染技巧:正背面剔除、深度测试、多边形偏移OpenGL(六)-- 渲染技巧:正背面剔除、深度测试、多边形偏移

放到OpenGL里虽然作为观察者已经移动到隐藏⾯了,但是OpenGL还是认为它还是隐藏⾯也就是背面,不需要绘制,这就造成了我们看到的一幕。这就是OpenGL的隐藏⾯消除。...OpenGL的正面、背面 上文中提到了一个概念背面。 正面 背面都是OpenGl人为定义的概念。 正面:点的绘制顺序是:逆时针 背面:点的绘制顺序是:顺时针 ?...有一个很容易记忆的方式: 右手握拳后,如果绘制方向与手指方向一致则为正面,反之 正背面剔除 了解正背面剔除之前,先了解一下OpenGL是如何绘制3D图形的,我们所知的油画算法绘制下图这种情况时就派不上用场了...导致OpenGl又不知道要绘制哪个面了,所以某个角度下出现了绘制的错乱。...所以OpenGL深度值是这样计算的: ? far、near是提供投影矩阵设置时使用的可见视图截锥的远近值。公式的Z值也是矩阵变换后的值。

1.3K31

技术干货:前端图形化技术简介(上)

Canvas通过Canvas.getContext(2d/3d)获得绘图上下文,采用绘制路径、填充路径、描边路径等操作绘制像素图片,并带有一定的矩阵旋转和偏移功能,总体与传统绘图流程一致。...经过几年的发展,Canvas具备了3D上下文接口,其背后的WebGL,实际是OpenGL-ES的一个子集,可使用GPU渲染内容。...实际上,通过改变视觉场的perspective,我们可以3D的场景获得一个伪2D的视角,实现2D的图形绘制的GPU加速。前几年这种方式甚为流行,但是苦于兼容性的问题,未被大量推广。...,应当根据矩阵信息进行虚拟图层捕捉查询(query),所以模型设计,将矩阵信息单独列出。...如果你的模型中含有多边形节点(尤其是的),捕捉多边形有两条路:外包盒,或者,去看看图形学的书。如果你选择后者,做好了请给我发简历。

1.6K70

OpenGL绘制平滑着色的三角形与相交区域的混合着色

一、三角形的绘制 OpenGL,面是由多边形构成的。三角形可能是最简单的多边形,它有三条边。可以使用GL_TRIANGLES模式通过把三个顶点连接到一起而绘出三角形。...二、绕法 绘制三角形的过程,三个顶点将三角形封闭的过程是有序的,即三角形的构成路径具有方向性,我们把指定顶点时顺序和方向的组合称为"绕法"。绕法是任何多边形图元的一个重要特征。...三、明暗处理 绘制多边形时,我们常常指定绘制的颜色,而在OpenGL,颜色实际上是对各个顶点而不是对各个多边形指定的。...OpenGL,用单一颜色处理的称为平面明暗处理(FlatShading),用许多不同颜色处理的称为光滑明暗处理(Smooth Shading),也称为Gourand明暗处理(Gourand Shading...五、多边形绘制规则 使用大量多边形构造一个复杂表面时,有两条重要规则。

2K110

使用 Pandas Python 绘制数据

这非常方便,你已将数据存储 Pandas DataFrame ,那么为什么不使用相同的库进行绘制呢? 本系列,我们将在每个库制作相同的多条形柱状图,以便我们可以比较它们的工作方式。...我们使用的数据是 1966 年至 2020 年的英国大选结果: image.png 自行绘制的数据 继续之前,请注意你可能需要调整 Python 环境来运行此代码,包括: 运行最新版本的 Python...本系列文章,我们已经看到了一些令人印象深刻的简单 API,但是 Pandas 一定能夺冠。...要在 x 轴上绘制按年份和每个党派分组的柱状图,我只需要这样做: import matplotlib.pyplot as plt ax = df.plot.bar(x='year') plt.show(...) 只有四行,这绝对是我们本系列创建的最棒的多条形柱状图。

6.8K20

OpenGL API 简介

跨平台的编程实例和演示,aux 很大程度上已经被 glut 库取代。OpenGL 的辅助库不能在所有的 OpenGL 平台上运行。...由于 glut的窗口管理函数是不依赖于运行环境的,因此 OpenGL 的工具库可以 XWindow,Windows NT, OS/2 等系统下运行,特别适合于开发不需要复杂界面的 OpenGL 示例程序...这部分函数主要用于连接 OpenGL 和 Windows ,以弥补 OpenGL 文本方面的不足。Windows 专用库只能用于 Windows 环境。...8.其他扩展库 这些函数可能是新的 OpenGL 函数,并没有标准 OpenGL实现,或者它们是用来扩展已存在的 OpenGL 函数的功能。...由于 OpenGL 扩展针对不同平台和不同驱动,OpenGL 不可能把所有的接口程序全部放到 gl.h、glx.h、wgl.h ,而是将这些函数头放在了glext.h、glxext.h 和 wglext.h

2.1K41

php判断坐标是否指定的多边形「建议收藏」

如何判断一个坐标点是否一个多边形,具体的应用场景就是,外卖派送,用户提供的坐标是否是在外卖的派送范围之内。...用户的坐标可以通过手机设备获取到,派送范围就是通过地图上,进行多边形绘制,获取多个坐标点连接起来的配送范围。下面来看看代码上是如何简单判断的。.../vendor/autoload.php'; //引入两个类 use Location\Coordinate; use Location\Polygon; //绘制一个多边形 $geo = new...两个坐标做测试 $a = new Coordinate(39.916527, 116.397128); $b = new Coordinate(39.901305, 116.397128); //判断是否执行的多边形...if ($geo->contains($a)) { echo "a点在多边形的范围内"; } else { echo "a点不在多边形的范围内"; } echo "";

1.1K30

OpenGL学习笔记 (二)- 顶点与绘制指令

OpenGL多边形区分正面与背面。默认情况下,两面的绘制方式相同。但是可以通过glPolygonMode来变更为点集、轮廓线和填充模式(默认)。...绘制多边形时,我们除了需要给出顶点坐标之外,还需要指定顶点之间的连接方式。OpenGL采用了数学“正向”的概念,也就是说对于(凸)多边形的正面,从屏幕上观察,它的顶点是以逆时针排列的。...OpenGL,使用四个分量(齐次坐标)来描述一个位置。不过,一个顶点还可以同时具备其他的数据,比如顶点处的法向量、对应的纹理坐标等等。 OpenGL缓冲 现代OpenGL广泛应用缓冲。...通过缓冲,我们可以把诸如顶点数据等等的数据放置图形硬件的高速存储器(又叫显存),供后续绘制等操作使用。因此OpenGL中有若干不同类型的缓冲,缓冲管理也有一个通用的接口。...绘制,经常会遇到两个顶点相同的情况(比如正方体的顶点),使用索引可以减少重复数据点,节省存储空间。

1.2K10

OpenGL 学习系列---坐标系统

在前面绘制基本图形,遇到了很明显的问题,圆形不像圆形,正多边形不像正多边形?就像下面图形一样: ?...不规则的形状 好好的正五边形却东倒西歪的,这就是因为我们前面的绘制都是把它当成 二维 的绘制,而在 OpenGL 却是绘制 三维的。...三维坐标系 立体几何的坐标系里面定义一个点的位置,需要 x、y、z 三个坐标轴的值,而在 OpenGL 绘制 3D 物体也是需要的。...透视除法是在三维绘制中产生近大远小效果非常关键重要的一步。 在此之前要先来了解一下 OpenGL 的 w 分量。...图形适应宽高比 文章一开始提到的,绘制的圆形变成了椭圆,绘制的正多边形却东倒西歪的,现在也能给出原因了。 默认情况下,局部空间、世界空间、观察空间、裁剪空间的坐标系都是重合的,都是以 ?

1.2K30

OpenGL开发库的详细介绍zz

跨平台的编程实例和演示,aux很大程度上已经被glut库取代。OpenGL的辅助库不能在所有的OpenGL平台上运行。 辅助库函数主要包括以下几类。...由于glut的窗口管理函数是不依赖于运行环境的,因此OpenGL的工具库可以X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。...这部分函数主要用于连接OpenGL和Windows ,以弥补OpenGL文本方面的不足。  Windows专用库只能用于Windows环境。...函数,并没有标准OpenGL实现,或者它们是用来扩展已存在的OpenGL函数的功能。...扩展针对不同平台和不同驱动,OpenGL不可能把所有的接口程序全部放到gl.h、glx.h、wgl.h,而是将这些函数头放在了glext.h、glxext.h和wglext.h

1.8K30
领券