I'm using Ultrafractal actually, to make it work, just use the code above in the inner loop (I just replace an existing mandelbulb formula where useDE is false, must be pasted in both places, for pos iteration and lighting iteration). Then add this line prior to the code
point.Init(real(zri), imag(zri), zj)
and these lines afterwards
zri = point.x + flip(point.y) + cri
zj = point.z + cj
and not forgetting to initialise the point vector at the beginning of the file:
Vector point = new Vector()
Lastly, you need the vector class implemented, I put this in mmf.ulb
class Vector(){
public:
func Init(float xx, float yy, float zz)
x = xx
y = yy
z = zz
endfunc
float func Dot(Vector other)
return x*other.x + y*other.y + z*other.z
endfunc
func Divide(float f)
x = x / f
y = y / f
z = z / f
endfunc
func Multiply(Vector a, float f)
x = a.x * f
y = a.y * f
z = a.z * f
endfunc
func MultiplyEquals(float f)
x = x * f
y = y * f
z = z * f
endfunc
func Normalise()
float mag = sqrt(x*x + y * y + z*z)
if mag>0
x = x / mag
y = y / mag
z = z / mag
endif
endfunc
float func Magnitude()
return sqrt(x*x + y*y + z*z)
endfunc
func Add(Vector a, Vector b)
x = a.x + b.x
y = a.y + b.y
z = a.z + b.z
endfunc
func AddEquals(Vector a)
x = x + a.x
y = y + a.y
z = z + a.z
endfunc
func Subtract(Vector a, Vector b)
x = a.x - b.x
y = a.y - b.y
z = a.z - b.z
endfunc
func Cross(Vector a, Vector b)
float _x = (a.y * b.z) - (a.z * b.y)
float _y = (a.z * b.x) - (a.x * b.z)
float _z = (a.x * b.y) - (a.y * b.x)
x = _x
y = _y
z = _z
endfunc
float x
float y
float z
}
I would add it to the MMFwip3D.ufm but I'm not sure if this is reserved just for mandelbulbs, don't know how to add an extra fractalType and am getting confused with the number of duplications of the inner loop algorithms in the latest version. Anyway, let me know if that doesn't work.
I put some pics in the gallery section
http://www.fractalforums.com/index.php?action=gallery;su=user;cat=111;u=853Do we dare go inside? -