some sculpted prim geometry accuracy and meshing speed improvements
parent
786ff98f6d
commit
14c1e991c6
|
@ -45,7 +45,7 @@ namespace PrimMesher
|
|||
public List<UVCoord> uvs;
|
||||
|
||||
public enum SculptType { sphere = 1, torus = 2, plane = 3, cylinder = 4 };
|
||||
private const float pixScale = 0.00390625f; // 1.0 / 256
|
||||
private static float pixScale = 1.0f / 255;
|
||||
|
||||
private Bitmap ScaleImage(Bitmap srcImage, float scale)
|
||||
{
|
||||
|
@ -73,7 +73,7 @@ namespace PrimMesher
|
|||
scaledImage.SetResolution(96.0f, 96.0f);
|
||||
|
||||
Graphics grPhoto = Graphics.FromImage(scaledImage);
|
||||
grPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
|
||||
grPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
|
||||
|
||||
grPhoto.DrawImage(srcImage,
|
||||
new Rectangle(destX, destY, destWidth, destHeight),
|
||||
|
@ -217,7 +217,6 @@ namespace PrimMesher
|
|||
if (sculptType == SculptType.plane)
|
||||
invert = !invert;
|
||||
|
||||
//float sourceScaleFactor = (float)lod / (float)Math.Max(sculptBitmap.Width, sculptBitmap.Height);
|
||||
float sourceScaleFactor = (float)(lod) / (float)Math.Sqrt(sculptBitmap.Width * sculptBitmap.Height);
|
||||
bool scaleSourceImage = sourceScaleFactor < 1.0f ? true : false;
|
||||
|
||||
|
@ -242,26 +241,12 @@ namespace PrimMesher
|
|||
int imageX, imageY;
|
||||
|
||||
if (sculptType == SculptType.sphere)
|
||||
{ // average the top and bottom row pixel values so the resulting vertices appear to converge
|
||||
int lastRow = height - 1;
|
||||
int r1 = 0, g1 = 0, b1 = 0;
|
||||
int r2 = 0, g2 = 0, b2 = 0;
|
||||
for (imageX = 0; imageX < width; imageX++)
|
||||
{
|
||||
Color c1 = bitmap.GetPixel(imageX, 0);
|
||||
Color c2 = bitmap.GetPixel(imageX, lastRow);
|
||||
int lastRow = height - 1;
|
||||
|
||||
r1 += c1.R;
|
||||
g1 += c1.G;
|
||||
b1 += c1.B;
|
||||
|
||||
r2 += c2.R;
|
||||
g2 += c2.G;
|
||||
b2 += c2.B;
|
||||
}
|
||||
|
||||
Color newC1 = Color.FromArgb(r1 / width, g1 / width, b1 / width);
|
||||
Color newC2 = Color.FromArgb(r2 / width, g2 / width, b2 / width);
|
||||
// poles of sphere mesh are the center pixels of the top and bottom rows
|
||||
Color newC1 = bitmap.GetPixel(width / 2, 0);
|
||||
Color newC2 = bitmap.GetPixel(width / 2, lastRow);
|
||||
|
||||
for (imageX = 0; imageX < width; imageX++)
|
||||
{
|
||||
|
@ -272,8 +257,8 @@ namespace PrimMesher
|
|||
}
|
||||
|
||||
|
||||
int pixelsDown = sculptType == SculptType.plane ? height : height + 1;
|
||||
int pixelsAcross = sculptType == SculptType.plane ? width : width + 1;
|
||||
int pixelsDown = sculptType == SculptType.sphere || sculptType == SculptType.cylinder ? height + 1 : height;
|
||||
|
||||
for (imageY = 0; imageY < pixelsDown; imageY++)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue