So this:

voxelInfo.chunk.SetVoxel(xc + x, yPos, zc + z, 9, true); voxelInfo.chunk.SetVoxel(xc - x, yPos, zc + z, 9, true); voxelInfo.chunk.SetVoxel(xc + x, yPos, zc - z, 9, true); voxelInfo.chunk.SetVoxel(xc - x, yPos, zc - z, 9, true);

Would become something like this:

voxelInfo.chunk.SetVoxelSpan(xc - x,xc + x, yPos, zc + z, 9, true); voxelInfo.chunk.SetVoxelSpan(xc - x,xc + x, yPos, zc - z, 9, true);You also need to be careful of using 32-bit integers. They can overflow quite easily once the ellipse gets too big due to the squares. I did a test years ago. I don't remember exactly how big I had to make it before getting an overflow, but it wasn't all that large.

Here is a better ellipse drawing algorithm I've used in the past:

void FillEllipse(long left,long top,long right,long bottom) { long a,b,x,y,temp; long old_y; long long d1,d2; long long a2,b2,a2b2,a2sqr,b2sqr,a4sqr,b4sqr; long long a8sqr,b8sqr,a4sqr_b4sqr; long long fn,fnw,fw; long long fnn,fnnw,fnwn,fnwnw,fnww,fww,fwnw; if(right < left) { temp = left; left = right; right = temp; } if(bottom < top) { temp = top; top = bottom; bottom = temp; } a = (right - left) / 2; b = (bottom - top) / 2; x = 0; y = b; a2 = a * a; b2 = b * b; a2b2 = a2 + b2; a2sqr = a2 + a2; b2sqr = b2 + b2; a4sqr = a2sqr + a2sqr; b4sqr = b2sqr + b2sqr; a8sqr = a4sqr + a4sqr; b8sqr = b4sqr + b4sqr; a4sqr_b4sqr = a4sqr + b4sqr; fn = a8sqr + a4sqr; fnn = a8sqr; fnnw = a8sqr; fnw = a8sqr + a4sqr - b8sqr * a + b8sqr; fnwn = a8sqr; fnwnw = a8sqr + b8sqr; fnww = b8sqr; fwnw = b8sqr; fww = b8sqr; d1 = b2 - b4sqr * a + a4sqr; while((fnw < a2b2) || (d1 < 0) || ((fnw - fn > b2) && (y > 0))) { DrawHorizontalLine(left + x,right - x,top + y,0.4,0.7,1.0); // Replace with your own span filling function. The hard-coded numbers were color values for testing purposes and can be ignored. DrawHorizontalLine(left + x,right - x,bottom - y,0.4,0.7,1.0); y--; if((d1 < 0) || (fnw - fn > b2)) { d1 += fn; fn += fnn; fnw += fnwn; }else{ x++; d1 += fnw; fn += fnnw; fnw += fnwnw; } } fw = fnw - fn + b4sqr; d2 = d1 + (fw + fw - fn - fn + a4sqr_b4sqr + a8sqr) / 4; fnw += b4sqr - a4sqr; old_y = y + 1; while(x <= a) { if(y != old_y) // prevent overdraw { DrawHorizontalLine(left + x,right - x,top + y,0.4,0.7,1.0); DrawHorizontalLine(left + x,right - x,bottom - y,0.4,0.7,1.0); } old_y = y; x++; if(d2 < 0) { y--; d2 += fnw; fw += fwnw; fnw += fnwnw; }else{ d2 += fw; fw += fww; fnw += fnww; } } }