草庐IT

三边形

全部标签

c++ - OpenGL - 平截头体不剔除远平面之外的多边形

我已经实现了截锥体剔除并正在检查边界框与截锥体平面的交集。我添加了暂停视锥体更新的功能,这让我可以查看视锥体剔除是否正常工作。当我暂停后转身时,我身后以及左侧和右侧没有任何渲染,它们逐渐变细,正如您所期望的那样。在剪辑距离(远平面)之外,它们仍然呈现,我不确定这是否是我的平截头体更新或边界框检查代码的问题,或者我使用了错误的矩阵还是什么。当我将投影矩阵中的距离设置为3000.0f时,它仍然表示边界框远远超过了它仍在平截头体中,但事实并非如此。这里是我创建模型View矩阵的地方:projectionMatrix=glm::perspective(newFOV,4.0f/3.0f,0.1f

c++ - 如何创建带孔 GEOS 库的多边形

我正在使用GEOS库,并且正在尝试创建一个Polygon有一个洞。根据documentation,我必须传入LinearRing,代表外部“壳”,和一个std::vector,表示壳中的孔。第一个参数很简单,但第二个参数给我带来了麻烦。Polygon希望第二个参数中的元素是LineStrings(LineString是Geometry的子类);否则,它会抛出一个异常说明LineString孔需要s。如果我只是投LineStrings至Geometry,然后它抛出异常。如果我不转换它,我会得到一个编译错误,指出一种类型的指针不能转换为另一种类型的指针。我不知道该怎么做。这是演示错误的简短

c++ - boost::geometry 测量点到多边形环的最大/最小距离的最有效方法

我一直在程序中使用boost::geometry库,主要用于处理多边形对象。我现在正在尝试优化我的代码以更好地缩放更大的多边形。我的一个函数检查给定多边形和给定点(通常在多边形内部)点和多边形外环之间的最小和最大距离。我通过在多边形边上循环来实现:polygonpol;pointmyPoint;doublemin=9999999,max=0;for(autoit1=boost::begin(bg::exterior_ring(pol));it1!=boost::end(bg::exterior_ring(pol));++it1){doubledistance=bg::distance(

c++ - 使用单调多边形的多边形三角剖分

我有一个没有孔的简单多边形,需要将其三角化为凸多边形以便在物理引擎中使用,而且我可以使用这些凸多边形通过三角形带进行渲染。This维基百科文章展示了如何使用单调多边形对多边形进行三角剖分。它提供了它如何工作的简短描述,但不够详细,我无法理解。这种方法似乎非常适合我的需要,FlashDemo它链接到表明该算法非常适合我的需要。我一直在谷歌上搜索以寻找对算法的更好解释,但我只能找到进行三角剖分的库或源代码。我更愿意学习它是如何工作的并编写我自己的方法,但如果我需要使用预先编写的库,它就必须这样做。任何人都可以提供解释或资源来说明我如何了解这种三角测量的工作原理吗?

c++ - 用鼠标在 OpenGL GLUT 中绘制多边形

我想在openGLGlut中通过鼠标交互绘制一个多边形,每次左键单击都将是一个顶点,并且将在每个顶点之间绘制一条线。单击鼠标右键时,多边形将关闭从最后一个顶点到第一个顶点绘制一条线。我想到了这个,但它似乎不起作用。voiddraw_polygon(intbutton,intstate,intx,inty){boolright_pushed=0;glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN){p1.x=x;p1.y=480-y;//ifrighti

c++ - 如何在 OpenGL 中将多边形置于前景?

下面的代码创建了2个方形多边形,红色和绿色。我想在绿色上方放置一个红色方block,但我做不到。声明深度缓冲区,必要时清理,正确配置正交系统。如果我指定一个超出范围(2;-2)的值,多边形就会消失。#includeconstexprautoFPS_RATE=120;intwindowHeight=600,windowWidth=600,windowDepth=600;voidinit();voididleFunction();voiddisplayFunction();doublegetTime();doublegetTime(){usingDuration=std::chrono::

c++ - 如何在 OpenGL 中将像素绘制为多边形的纹理?

在C++OpenGL中,我想手动将每个像素(作为我假设的纹理)绘制到一个简单的正方形基元上,或者实际上是2个多边形形成一个正方形。我不知道从哪里开始,也不知道要寻找什么短语。我是在寻找纹理贴图还是创建纹理?大多数示例都是从文件加载,但我不想这样做。我已经尝试阅读我的OpenGL编程指南书,但它只是一个迷宫,因为我对OpenGL还很陌生。请帮忙。 最佳答案 仔细看看glTexImage2D。这是在OpenGL中为2D纹理加载图像的调用。glTexImage2D实际上采用原始指针指向图像中的像素数据。你可以自己分配内存,直接设置图像数据

c++ - 如何在 C++ 中绘制多边形以使线条不相交?

我需要用C++绘制一个多边形。我在vector中设置随机点,然后通过线连接它们。但有时这些线相交,我会得到这样的结果。是否有任何公式或类似的东西,使线条不会交叉?部分代码如下:voiddraw_picture(Canvas&canvas){PairXYa,b,c,d,e;intk;vectorvertex;vertex.push_back(PairXY(drandom(k),drandom(k)));vertex.push_back(PairXY(drandom(k),drandom(k)));vertex.push_back(PairXY(drandom(k),drandom(k))

c++ - boost 多边形序列化 : Ring

根据这个相关问题(BoostPolygonSerialization)。我正在尝试使用Boost序列化多边形。我现在遇到的问题是,我正在尝试使用自定义X、Y、点的多边形来编译示例,但编译器在编译时抛出此错误:error:'classboost::geometry::model::ring>'hasnomembernamed'serialize'就像没有定义任何函数来序列化一个环。由于Ring从std::vector扩展,并且如相关问题中所述,因此没有必要为其序列化定义方法。但是编译器会提示。这里有一个关于定义多边形及其序列化的完整示例:#include#include#include#

c++ - OpenGL 平滑多边形

我正在尝试使用OpenGL将它变成一个平滑的多边形,但它什么也没做。有人可以解释我做错了什么吗?glColor4ub(r,g,b,a);glEnable(GL_POLYGON_SMOOTH);glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);glBegin(GL_QUADS);glVertex2i(x,y);glVertex2i(x1,y1);glVertex2i(x2,y2);glVertex2i(x3,y3);glEnd();glDisable(GL_POLYGON_SMOOTH);glHint(GL_POLYGON_SMOOTH_HINT,GL_D