非方形径向渐变图像生成

Non Square Radial Gradient Image Generation

我正在 Unity 中创建一个函数,用允许水平、垂直、对角线和径向方向的渐变填充纹理。前三个很简单,并且适用于矩形图像,但是,我能找到的唯一用于径向渐变的算法取决于方形图像,如下所示:

Vector2 center = new Vector2 ( texture.width * 0.5f, texture.height * 0.5f );
for ( int y = 0; y < texture.height; y++ )
{
    for ( int x = 0; x < texture.width; x++ )
    {
        float distanceFromCenter = Vector2.Distance ( center, new Vector2 ( x, y ) );
        float t = invert ? 1 - ( 0.5f - ( distanceFromCenter / texture.width ) ) : 0.5f - ( distanceFromCenter / texture.width );
        texture.SetPixel ( x, y, gradient.Evaluate ( t ) );
    }
}

如何使其适用于矩形图像?

问题出在 texture.width 的除法上。对于方形纹理,这并不重要,因为它的高度和宽度都是相同的长度。

您需要将当前点除以纹理的尺寸。这将为您提供介于 0 和 1 之间的 x 和 y 值。

Vector2 relativePoint = new Vector2 ( x / texture.width, y / texture.height );

接下来,获取新中心点(0.5, 0.5)和这个新点之间的距离,给你在点(x, y)处的中心采样值。

float centeredPointSampleValue = 0.5f - Vector2.Distance ( new Vector2(0.5, 0.5), relativePoint );

并将它们放在一起:

for ( int y = 0; y < texture.height; y++ )
{
    for ( int x = 0; x < texture.width; x++ )
    {
        Vector2 relativePoint = new Vector2 ( x / texture.width, y / texture.height );
        float centeredPointSampleValue = 0.5f - Vector2.Distance ( new Vector2( 0.5, 0.5 ), relativePoint );
        float t = invert ? 1 - centeredPointSampleValue  : centeredPointSampleValue ;
        texture.SetPixel ( x, y, gradient.Evaluate ( t ) );
    }
}