public void renderTo(BufferedImage image, Matrix2D matrix)
	{
		Vector2d screenPos = matrix.transform(0, 0);
		double delta = lastUpdated - screenPos.x;
		if (Math.abs(delta) > 1) {
			shift((int)delta);
			lastUpdated -= delta;
		}
		
		// RENDER
		Colour col = new Colour(0x6699FF);
		int midOnScreen = (int) matrix.transform(0, 0).y;
		int distanceFromMid;
		
		int[] data = getImageData(this.image);
		int i = 0;
		Colour newCol = new Colour();
		for (int y = 0; y < image.getHeight(); y ++) {
			for (int x = 0; x < image.getWidth(); x ++) {
				distanceFromMid = (int) (Math.abs(y - midOnScreen) / values[x]);
					/*int a = x % 30;
					if (a > 15) a = 30 - a;
					distanceFromMid += a;*/
				if (distanceFromMid >= 1) {
					double factor = 30d / ((int)(distanceFromMid / roundTo) * roundTo);
					if (factor > 1) factor = 1;
					//newCol = col.clone().multiply(factor);
					newCol.setRed((int) (col.getRed() * factor));
					newCol.setBlue((int) (col.getBlue() * factor));
					newCol.setGreen((int) (col.getGreen() * factor));
					newCol.setBlue((int) (newCol.getBlue() * blueFactor));
					data[i] = newCol.getRGB();
					
				} else {
					data[i] = col.getRGB();
				}
				i ++;
			}
		}
		int[] canvasData = getImageData(image);
		System.arraycopy(data, 0, canvasData, 0, data.length);
		
		updateRandomFactor();
	}