The Huichols call peyote, the sacred hallucinogenic cactus, "Hikuri" or Tatei Hikuri", which can be translated as "Our Mother Hikuri". The hikuri&fractal-lookin' geometry in the background is completely made out of code inside my 3D IDE. Here is that code: struct vec3{ float x, y, z; };
struct vec4{ float x, y, z, w; };
struct mat3{ float m00, m01, m02, m10, m11, m12, m20, m21, m22; };
vec3 toVec3(vector v) { return vec3(v[0], v[1], v[2]); }
mat3 __operator__mul__(mat3 A, mat3 B)
{
return mat3(A.m00*B.m00+A.m01*B.m10+A.m02*B.m20, A.m00*B.m01+A.m01*B.m11+A.m02*B.m21, A.m00*B.m02+A.m01*B.m12+A.m02*B.m22,
A.m10*B.m00+A.m11*B.m10+A.m12*B.m20, A.m10*B.m01+A.m11*B.m11+A.m12*B.m21, A.m10*B.m02+A.m11*B.m12+A.m12*B.m22,
A.m20*B.m00+A.m21*B.m10+A.m22*B.m20, A.m20*B.m01+A.m21*B.m11+A.m22*B.m21, A.m20*B.m02+A.m21*B.m12+A.m22*B.m22);
}
vec4 __operator__add__(vec4 a, vec4 b) { return vec4(a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w); }
vec3 __operator__add__(vec3 a, vec3 b) { return vec3(a.x+b.x, a.y+b.y, a.z+b.z); }
vec3 __operator__mul__(float val, vec3 v){ return vec3(val*v.x, val*v.y, val*v.z); }
vec3 __operator__mul__(vec3 v, mat3 m){ return vec3(v.x*m.m00+v.y*m.m01+v.z*m.m02, v.x*m.m10+v.y*m.m11+v.z*m.m12, v.x*m.m20+v.y*m.m21+v.z*m.m22); }
// Return rotation matrix for rotating around vector v by angle
mat3 rotationMatrix3(vec3 v, float angle)
{
float c = cos(radians(angle)), s = sin(radians(angle));
return mat3(c+(1.0-c)*v.x*v.x, (1.0-c)*v.x*v.y-s*v.z, (1.0-c)*v.x*v.z+s*v.y,
(1.0-c)*v.x*v.y+s*v.z, c+(1.0-c)*v.y*v.y, (1.0-c)*v.y*v.z-s*v.x,
(1.0-c)*v.x*v.z-s*v.y, (1.0-c)*v.y*v.z+s*v.x, c+(1.0-c)*v.z*v.z);
}
mat3 rotationMatrixXYZ(vec3 v)
{
return rotationMatrix3(vec3(1.0,0.0,0.0), v.x)*rotationMatrix3(vec3(0.0,1.0,0.0), v.y)*rotationMatrix3(vec3(0.0,0.0,1.0), v.z);
}
// Return rotation matrix for rotating around vector v by angle
mat4 rotationMatrix(vec3 v, float angle)
{
float c = cos(radians(angle)), s = sin(radians(angle));
return mat4(c+(1.0-c)*v.x*v.x, (1.0-c)*v.x*v.y-s*v.z, (1.0-c)*v.x*v.z+s*v.y, 0.0,
(1.0-c)*v.x*v.y+s*v.z, c+(1.0-c)*v.y*v.y, (1.0-c)*v.y*v.z-s*v.x, 0.0,
(1.0-c)*v.x*v.z-s*v.y, (1.0-c)*v.y*v.z+s*v.x, c+(1.0-c)*v.z*v.z, 0.0,
0.0, 0.0, 0.0, 1.0);
}
float opS( float d1, float d2 ){ return max(-d2,d1); }
vector opU( vector d1, vector d2 ){ return (d1[0]