描述具有可变半径的圆形对象的顶点

时间:2014-08-07 04:45:29

标签: opengl

希望澄清:我希望在三角扇的所有顶点上运行 for循环,可以获取位置和方向的2d向量,以及任意角度和半径(in下面的图片是180度)和产生与下图相似的结果

原帖:考虑到光源的位置,方向,半径和角度,我试图描述光源的三角扇的顶点。圆圈很容易。我试图复制像这张照片中的东西,其方向是正x方向,角度是pi弧度。我遇到的困难是,对于未包含的角度,半径会下降,在图片中,这对应于垂直方向顶点左侧的所有顶点。

The General Shape of the Object, With the Angle = 180 Degrees

从游戏Full Bore http://www.wholehog-games.com/fullbore/

中拍摄的照片

1 个答案:

答案 0 :(得分:2)

您可以通过使用带有方向的点积插入半径来实现此目的:

double dotCutoff = cos(angle / 2);
double exponent = 1;
for(int i = 0; i <= steps; ++i)
{
    double vertexAngle = i * 2 * Pi / steps;
    vec2 vertexDirection = vec2(sin(vertexAngle), cos(vertexAngle));
    double dotDirection = dot(vertexDirection, direction);
    double r = 1;
    if(dotDirection < dotCutoff)
        r = falloff + (1 - falloff) * pow((dotDirection - cutoff)/(cutoff + 1) + 1,exponent);
    emit vertex pos + r * radius * vertexDirection;
}

falloff是指定最小半径的分数。即falloff 0.2表示相反方向的半径是原始半径的0.2倍。 exponent指定了下降的陡度。

对于falloff = 0.5angle = 120°exponent = 1,您会看到以下图片:

Plot

你可以用指数调整它:

falloff = 0.5, angle = 120°, exponent = 4

Plot

对于非常小的falloffs或大角度,您应该注意这种行为:

falloff = 0.3, angle = 180°, exponent = 1

Plot

您可以调整指数以使左边缘平滑:

falloff = 0.3, angle = 180°, exponent = 2

Plot