CVector3 RenderedImage::CalcPointPersp(const CVector3 &point, const CRotationMatrix &rot, double persp) { CVector3 vect; CVector3 out; vect = rot.RotateVector(point); out.x = vect.x / (1.0 + vect.y * persp); out.y = -vect.z / (1.0 + vect.y * persp); return out; }
void Mandelbulbulb4Iteration(CVector3 &z, const cFractal *fractal, sMandelbulbAux &aux) { double rp = pow(aux.r, fractal->bulb.power - 1); double angZ = atan2(z.y, z.x) + fractal->bulb.alphaAngleOffset; double angY = atan2(z.z, z.x) + fractal->bulb.betaAngleOffset; double angX = atan2(z.z, z.y) + fractal->bulb.gammaAngleOffset; CRotationMatrix rotM; rotM.RotateX(angX * (fractal->bulb.power - 1)); rotM.RotateY(angY * (fractal->bulb.power - 1)); rotM.RotateZ(angZ * (fractal->bulb.power - 1)); z = rotM.RotateVector(z) * rp; }