Merge pull request #12 from mlavik1/negative-datavalues
Fix for negative data values not working properly
This commit is contained in:
Коммит
00d1aa900e
|
@ -6,7 +6,10 @@ namespace UnityVolumeRendering
|
|||
{
|
||||
public static Texture2D GenerateHistogramTexture(VolumeDataset dataset)
|
||||
{
|
||||
int numSamples = dataset.GetMaxDataValue() + 1;
|
||||
int minValue = dataset.GetMinDataValue();
|
||||
int maxValue = dataset.GetMaxDataValue();
|
||||
|
||||
int numSamples = maxValue - minValue + 1;
|
||||
int[] values = new int[numSamples];
|
||||
Color[] cols = new Color[numSamples];
|
||||
Texture2D texture = new Texture2D(numSamples, 1, TextureFormat.RGBAFloat, false);
|
||||
|
@ -14,8 +17,9 @@ namespace UnityVolumeRendering
|
|||
int maxFreq = 0;
|
||||
for (int iData = 0; iData < dataset.data.Length; iData++)
|
||||
{
|
||||
values[dataset.data[iData]] += 1;
|
||||
maxFreq = System.Math.Max(values[dataset.data[iData]], maxFreq);
|
||||
int dataValue = dataset.data[iData] - minValue;
|
||||
values[dataValue] += 1;
|
||||
maxFreq = System.Math.Max(values[dataValue], maxFreq);
|
||||
}
|
||||
|
||||
for (int iSample = 0; iSample < numSamples; iSample++)
|
||||
|
|
|
@ -18,7 +18,9 @@ namespace UnityVolumeRendering
|
|||
int dimY = dataset.dimY;
|
||||
int dimZ = dataset.dimZ;
|
||||
|
||||
int maxRange = dataset.GetMaxDataValue() - dataset.GetMinDataValue();
|
||||
int minValue = dataset.GetMinDataValue();
|
||||
int maxValue = dataset.GetMaxDataValue();
|
||||
int maxRange = maxValue - minValue;
|
||||
|
||||
Color[] cols = new Color[dataset.data.Length];
|
||||
for (int x = 0; x < dataset.dimX; x++)
|
||||
|
@ -29,16 +31,16 @@ namespace UnityVolumeRendering
|
|||
{
|
||||
int iData = x + y * dimX + z * (dimX * dimY);
|
||||
|
||||
int x1 = dataset.data[Math.Min(x + 1, dimX - 1) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
|
||||
int x2 = dataset.data[Math.Max(x - 1, 0) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
|
||||
int y1 = dataset.data[x + Math.Min(y + 1, dimY - 1) * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
|
||||
int y2 = dataset.data[x + Math.Max(y - 1, 0) * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
|
||||
int z1 = dataset.data[x + y * dataset.dimX + Math.Min(z + 1, dimZ - 1) * (dataset.dimX * dataset.dimY)];
|
||||
int z2 = dataset.data[x + y * dataset.dimX + Math.Max(z - 1, 0) * (dataset.dimX * dataset.dimY)];
|
||||
int x1 = dataset.data[Math.Min(x + 1, dimX - 1) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
int x2 = dataset.data[Math.Max(x - 1, 0) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
int y1 = dataset.data[x + Math.Min(y + 1, dimY - 1) * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
int y2 = dataset.data[x + Math.Max(y - 1, 0) * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
int z1 = dataset.data[x + y * dataset.dimX + Math.Min(z + 1, dimZ - 1) * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
int z2 = dataset.data[x + y * dataset.dimX + Math.Max(z - 1, 0) * (dataset.dimX * dataset.dimY)] - minValue;
|
||||
|
||||
Vector3 grad = new Vector3((x2 - x1) / (float)maxRange, (y2 - y1) / (float)maxRange, (z2 - z1) / (float)maxRange);
|
||||
|
||||
cols[iData] = new Color(grad.x, grad.y, grad.z, (float)dataset.data[iData] / (float)dataset.GetMaxDataValue());
|
||||
cols[iData] = new Color(grad.x, grad.y, grad.z, (float)(dataset.data[iData] - minValue) / maxRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче