希望澄清:我希望在三角扇的所有顶点上运行 for循环,可以获取位置和方向的2d向量,以及任意角度和半径(in下面的图片是180度)和产生与下图相似的结果
原帖:考虑到光源的位置,方向,半径和角度,我试图描述光源的三角扇的顶点。圆圈很容易。我试图复制像这张照片中的东西,其方向是正x方向,角度是pi弧度。我遇到的困难是,对于未包含的角度,半径会下降,在图片中,这对应于垂直方向顶点左侧的所有顶点。
从游戏Full Bore http://www.wholehog-games.com/fullbore/
中拍摄的照片答案 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.5
,angle = 120°
和exponent = 1
,您会看到以下图片:
你可以用指数调整它:
falloff = 0.5, angle = 120°, exponent = 4
:
对于非常小的falloffs
或大角度,您应该注意这种行为:
falloff = 0.3, angle = 180°, exponent = 1
:
您可以调整指数以使左边缘平滑:
falloff = 0.3, angle = 180°, exponent = 2
: