Vex
Snapping Vectors to World axis
vector snapToAxis(vector input){
float lx = abs(input.x);
float ly = abs(input.y);
float lz = abs(input.z);
if (lx > ly && lx > lz){
return set(sign(input.x), 0, 0);
}else if(ly > lx && ly > lz){
return set(0, sign(input.y), 0);
}else{
return set(0, 0, sign(input.z));
}
}
color_correction vex
// create spare parameters
float gamma = ch('gamma'); //default is 1
float hue = ch('hue');
float sat = ch('sat');
float val = ch('val');
@Cd = pow(hsvtorgb(rgbtohsv(@Cd) + set(hue, sat, val)), gamma);
Meassure angle between neighbour points
// works best on unshared points
int isBorderEdge(int pt0, pt1)
{
int hedge = pointhedge(0, pt0, pt1); // try finding hedge
if (hedge == -1 )
{
hedge = pointhedge(0, pt1, pt0); // try reversed hedge
if (hedge == -1 ) return -1; // invalid hedge
}
return hedge_equivcount(0, hedge) == 1; // 1 if border edge
}
// https://forums.odforce.net/topic/25589-border-edge-query-in-vex/
int pointNeighbours[] = neighbours(0,@ptnum);
i[]@edgeNeighbours;
vector sum = {0,0,0};
foreach(int point;pointNeighbours){
sum += @P - point(0, 'P', point);
if(isBorderEdge(@ptnum,point)){
append(i[]@edgeNeighbours,point);
}
}
v@sum = sum/len(pointNeighbours );
v@prev_point_vec = normalize(@P - point(0, 'P', @edgeNeighbours[0]));
v@next_point_vec = normalize(@P - point(0, 'P', @edgeNeighbours[1]));
float difference = dot(v@sum,v@out);
if( difference > 0.5){
f@angle =degrees(acos(dot( v@prev_point_vec, v@next_point_vec)));
}else{
f@angle =360 - degrees(acos(dot( v@next_point_vec,v@prev_point_vec)));
}
OpenCl
converting textureCoords to bufferCoords
#bind layer src? val=0
#bind layer !&dst
int2 textureToBufferCoords(float2 texCoords, int2 bufferDimensions)
{
float2 scaled = texCoords * convert_float2(bufferDimensions - (int2)(1, 1));
int2 result = convert_int2(round(scaled));
return result;
}
@KERNEL
{
int2 bufferDimensions = (int2)(@xres, @yres);
float2 texCoords = (float2)(1.0f,1.0f);
int2 bufferCoords = textureToBufferCoords(texCoords, bufferDimensions);
float4 out = @src.bufferIndex(bufferCoords);
@dst.set(out);
}