You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
Plaintext
46 lines
1.3 KiB
Plaintext
// xs_begin
|
|
// author : 'ephtracy'
|
|
// arg : { var = 'm_degree' name = 'Degree' value = '3' range = '3 64' step = '1' precision = '0' }
|
|
// xs_end
|
|
|
|
//===== built-in args =====
|
|
// uniform vec3 i_volume_size; // volume size [1-256]
|
|
// uniform float i_color_index; // current color index [0-255]
|
|
// uniform int i_num_color_sels; // number of color selections [1-255]
|
|
|
|
//===== built-in functions =====
|
|
// float voxel( vec3 v ); // get voxel color index
|
|
// float color_sel( float k ); // get kth selected color index
|
|
// vec4 palette( float index ); // get palette color
|
|
|
|
vec3 powern( vec3 v, float n ) {
|
|
float r = length( v );
|
|
float phi = atan( v.y, v.x );
|
|
float theta = atan( length( v.xy ), v.z );
|
|
|
|
r = pow( r, n );
|
|
phi *= n;
|
|
theta *= n;
|
|
|
|
return r * vec3(
|
|
sin( theta ) * vec2( cos( phi ), sin( phi ) ),
|
|
cos( theta )
|
|
);
|
|
}
|
|
|
|
// generate a new voxel color index [0, 255] at position v ( v is at the center of voxel, such as vec3( 1.5, 2.5, 4.5 ) )
|
|
float map( vec3 v ) {
|
|
float n = max( m_degree, 4.0 );
|
|
|
|
vec3 center = i_volume_size * 0.5;
|
|
|
|
float size = min( min( center.x, center.y ), center.z );
|
|
|
|
vec3 u = ( v - center ) / size * 1.1;
|
|
|
|
for ( int i = 0; i < 8; i++ ) {
|
|
u = powern( u, vec3(n) ) + u;
|
|
}
|
|
|
|
return i_color_index * step( length( u ), 2.0 );
|
|
} |