Hey, I am trying to create a 2DTexture showing the mandelbrot set, but instead, it only shows a black square on the plane that I projected it.
Here is my code:
Note: for some reason, I implemented a complex number class.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShaderFun : MonoBehaviour
{
Texture2D mandelbrot;
//range of the coordinate system
Vector2 xRange = new Vector2(-2, 2);
Vector2 yRange = new Vector2(-2, 2);
int maxIter = 10;
private void Start()
{
mandelbrot = new Texture2D(1028, 1028);
for (int x = 0; x < mandelbrot.width; x++)
{
for (int y = 0; y < mandelbrot.height; y++)
{
//converting pixel coordinates to regular descartes coordinate system
float coordinateX = Mathf.Lerp(xRange.x, xRange.y, (float) x / (float) mandelbrot.width);
float coordinateY = Mathf.Lerp(yRange.x, yRange.y, (float)y / (float)mandelbrot.height);
Complex coordinate = new Complex(coordinateX, coordinateY);
Complex z = new Complex(0, 0);
for (int i = 0; i < maxIter; i++)
{
z = Complex.Add(Complex.Multiply(z, z), coordinate);
if (Complex.Abs(z) > 2)
{
mandelbrot.SetPixel(x, y, Color.white);
break;
}
}
//last check
if (Complex.Abs(z) > 2)
{
mandelbrot.SetPixel(x, y, Color.white);
}
else
{
mandelbrot.SetPixel(x, y, Color.black);
}
}
}
mandelbrot.Apply();
gameObject.GetComponent<Renderer>().material.mainTexture = mandelbrot;
}
class Complex
{
public float realPart;
public float imaginaryPart;
public Complex(float _realPart, float _imaginaryPart)
{
realPart = _realPart;
imaginaryPart = _imaginaryPart;
}
public static Complex Add(Complex a, Complex b)
{
return new Complex(a.realPart + b.realPart, a.imaginaryPart + b.imaginaryPart);
}
public static Complex Multiply(Complex a, Complex b)
{
return new Complex(a.realPart * b.realPart + a.imaginaryPart * b.imaginaryPart, a.realPart * b.imaginaryPart + b.realPart * a.imaginaryPart);
}
public static float Abs(Complex a)
{
return Mathf.Sqrt(Mathf.Pow(a.realPart, 2) + Mathf.Pow(a.imaginaryPart, 2));
}
}
}