云计算百科
云计算领域专业知识百科平台

VEX实现pixel_sorted效果

Sort决定方向: 

UV:

vector rel = relbbox(0,@P);
float x = rel.x;
float z = rel.z;

int invertu = chi("invertu");
int invertv = chi("invertv");
float scaleu = chf("scaleu");
float scalev = chf("scalev");
float scale = chf("scale");

if(invertu==1) x=1-x;
if(invertv==1) z=1-z;
x *= scaleu * scale;
z *= scalev * scale;

@Cd = texture(chs("tex"),x,z);

拉伸: 

1.

int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;

int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector color = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
color = lerp(@Cd,mixcolor,1-ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}

2. 

1-ratio会让偏移的最后一个颜色等于拉伸的颜色;替换成ratio则会使偏移的第一个颜色等于拉伸的颜色。

int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;

int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
float ratio = i*1.0/length;
vector color = lerp(@Cd,mixcolor,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}

3.

不使用mixcolor混合,而使用自己原本的颜色混合,可以使尾部变柔和。 

int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;

int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector col = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
vector color = lerp(@Cd,col,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}

4.

对ratio进行映射。

int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;

int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector col = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
ratio = chramp("ratio",ratio);
vector color = lerp(@Cd,col,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » VEX实现pixel_sorted效果
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!