2011-11-19 21 views
0

是否可以告诉OpenGL绘制具有10个细分的4度(5控制点)贝塞尔曲线?在OpenGL中绘制具有有限细分的贝塞尔曲线

我这个尝试:

point ctrlpts[] = {..., ..., ..., ...}; 
glMap1f(GL_MAP1_VERTEX_3, 0, 1, 3, 5, ctrlpts); 
glBegin(GL_LINE_STRIP); 
     for (i = 0; i <= 30; i++) 
     glEvalCoord1f((GLfloat) i/30.0); 
glEnd(); 

但这只是绘制曲线很好。我在想,我希望贝塞尔曲线内的算法只能绘制到10个细分,然后停止。该行应该看起来有点面。

回答

4

那么从0只是环10,然后除以10

的OpenGL只知道平面原语。曲线超出了它的把握。评估者所做的是,他们允许您告诉OpenGL插值函数的系数,然后告诉OpenGL对给定参数的函数进行采样。

技术上OpenGL评估者是过时的技术。它们也不是硬件加速的,也不是简化制造驱动程序的开发。他们从OpenGL-3核心中被移除,原因很简单,您可以使用顶点着色器实现评估器功能,然后由GPU加速,然后您可以在其上放置tesselators以在GPU上生成采样点,如好。

+0

将0从0分为10,是真的细分为10个部分,还是仅仅是“看起来像”10个细分?只是好奇,是否有可能从'glEvalCoord1f()'获取坐标本身? – Carven

+0

@xEnOn:它确实是10个细分。 glEvalCoord1f的作用类似于一个包装器,用于评估给定参数的贝塞尔曲线并为其调用glVertex。 OpenGL本身只是一个绘图API而不是一个数学或几何图形库,所以试图从glEvalCord1f中“获取”值是错误的(尽管不是不可能的,如果跳过某些环)。只需自己评估贝塞尔曲线。你有控制点,维基百科的公式/算法。如果您将输出提供给glVertex调用,结果将难以区分。 – datenwolf