gpt4 book ai didi

OpenGL 2D 多边形形状绘制和操作?

转载 作者:行者123 更新时间:2023-12-04 02:25:25 25 4
gpt4 key购买 nike

我正在开发一个 2D 游戏项目,我希望用户在其中绘制 2D 多边形(封闭路径),例如:

Explanation

可能的解决方案:

1 - 按点绘制并计算边界线。
1 个问题 - 边界线的计算。

2 - 从一个椭圆开始,让用户通过移动顶点来 reshape 它。
2 问题 - 当椭圆扩大时,它会在您无法 reshape 的顶点之间产生间隙。

3 - 添加和移动顶点
3 问题 - 剪耳三角测量卡在某个点(第 53 行 while 循环 @ http://pastebin.com/Ug337mH2,进入无限循环)

**经过一番思考,我决定更好地解决无限循环(在方法 3 中)问题,而不是放弃添加和移动顶点方法。是什么导致 while 中的无限循环在第 53 行循环(见 http://pastebin.com/Ug337mH2)?

我的猜测:剪耳三角测量无法将某个顶点附加到任何三角形并不断重试。**

如何在我的游戏中轻松实现多边形绘制?

最佳答案

使用 OpenGL 的 tesselator:

  #include <gl/gl.h>
#include <gl/glu.h>
#include <vector>

using namespace std;

typedef vector< vector< GLdouble* > > contours;
contours poly;
//Initialize poly here

GLUtesselator* tess = gluNewTess();
gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK*)())&BeginCallback);
gluTessCallback(tess, GLU_TESS_VERTEX, (void (CALLBACK*)())&VertexCallback);
gluTessCallback(tess, GLU_TESS_END, (void (CALLBACK*)())&EndCallback);
gluTessCallback(tess, GLU_TESS_COMBINE, (void (CALLBACK*)())&CombineCallback);
gluTessCallback(tess, GLU_TESS_ERROR, (void (CALLBACK*)())&ErrorCallback);
gluTessNormal(tess, 0.0, 0.0, 1.0);
gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO);
gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_FALSE); //GL_FALSE
gluTessBeginPolygon(tess, NULL);
for (UINT i = 0; i < poly.size(); ++i)
{
gluTessBeginContour(tess);
for (UINT j = 0; j < poly[i].size(); ++j)
{
gluTessVertex(tess, poly[i][j], poly[i][j]);
}
gluTessEndContour(tess);
}
gluTessEndPolygon(tess);
gluDeleteTess(tess); // Delete after tessellation

关于OpenGL 2D 多边形形状绘制和操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com