我正在考虑将 iPhone 项目从核心动画移植到 OpenGL-ES。
我需要渲染一个由 CGPathRef 构造的按钮。
但似乎 GL 没有提供贝塞尔曲线。
谁能提供一些在 GL 中呈现贝塞尔曲线的代码?
我正在考虑将 iPhone 项目从核心动画移植到 OpenGL-ES。
我需要渲染一个由 CGPathRef 构造的按钮。
但似乎 GL 没有提供贝塞尔曲线。
谁能提供一些在 GL 中呈现贝塞尔曲线的代码?
这将接受一系列点来绘制圆形贝塞尔线。它必须使用点精灵。如果你给它发送一条三点线,以及一些要绘制的点精灵,它将创建一条贝塞尔线。该代码基于我在某处找到的东西,但我不记得在哪里。
这个需要:
CGPoint origin - First Point CGPoint control - Mid Point CGPoint destination - End Point int segments - 要渲染的点数。
要计算点数,我使用:
count = MAX(ceilf(sqrtf(([[currentStroke objectAtIndex:i+2] CGPointValue].x - [[currentStroke objectAtIndex:i] CGPointValue].x)
* ([[currentStroke objectAtIndex:i+2] CGPointValue].x - [[currentStroke objectAtIndex:i] CGPointValue].x)
+ ((invertedYThirdCoord - invertedYBegCoord) * (invertedYThirdCoord - invertedYBegCoord))) / 2), 1)*4;
无论如何,代码(在 C++ 中):
CGPoint vertices[segments];
CGPoint midPoint;
float x, y;
float t = 0.0;
for(int i = 0; i < (segments); i++)
{
x = pow(1 - t, 2) * origin.x + 2.0 * (1 - t) * t * control.x + t * t * destination.x;
y = pow(1 - t, 2) * origin.y + 2.0 * (1 - t) * t * control.y + t * t * destination.y;
vertices[i] = CGPointMake(x, y);
t += 1.0 / (segments);
}
midPoint = CGPointMake(x, 288 - y);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glDrawArrays(GL_POINTS, 0, segments);
照常进行此渲染。