我已经尝试了过去3个小时来弄清楚如何使用贝塞尔曲线公式,glMap1f和glEvalCoord1f来创建一个弯曲的形状。 (我基本上想要创建the right of kirby)。
但是,我收效甚微。当我使用glBegin(GL_LINE_STRIP)时,它会跟踪轮廓,但是有一个大的+(比如你的x和y轴)。当我尝试(GL_POLYGON)时,填充起作用,但它有一个钻石连接了我正在使用的4个点。
答案 0 :(得分:0)
我发现了什么是错的。事实证明我错误地使用了sizeof(array)
。 (具体而言,参考下面的代码,而不是使用i < numCurves
,我天真地尝试i < sizeof(points)
)
因此,我没有绘制4-5分,而是绘制了192条曲线,导致了奇怪的结果。中间的钻石是由于没有连接到起点。有关想要执行此操作的未来人员的参考,请参阅以下代码:
错误图片:
Erroneous Picture http://img535.imageshack.us/img535/8207/failfd.png
最终产品:
Final Product http://img685.imageshack.us/img685/7641/finalsa.png
void drawIrregularPolygon(GLfloat points[][4][3], int numCurves)
// REQUIRES: GLfloat points to be a polygon and center of circle to be current matrix
// EFFECTS: An irregular shape would be drawn
{
for (int i = 0; i < numCurves; i++)
{
glMap1f( GL_MAP1_VERTEX_3, 0.0f, 1.0f, 3, 4, &points[i][0][0] );
glBegin(GL_POLYGON); //replace GL_POLYGON with GL_LINE_STRIP if you need outline
for (int j = 0; j <= TOTAL_SEGMENTS; j++)
glEvalCoord1f((GLfloat) j / TOTAL_SEGMENTS);
glVertex2f(points[0][0][0], points[0][0][1]);
glEnd();
}
}