Im не 100% берега, что я делаю неправильно. Im работает над добавлением HSL цвета в мой пользовательский двигатель, и моя тестовая программа создает неправильный цвет спектра Снимок экрана: Screenshot of Program OutputHSL Цвет не работает правильно
Исходный код:
public Color toRGB()
{
float r = 0.0f;
float g = 0.0f;
float b = 0.0f;
float v1, v2;
if(_sat == 0.0f)
{
r = _lum;
g = _lum;
b = _lum;
}
else
{
if (_lum < 0.5f)
v2 = _lum * (1.0f + _sat);
else
v2 = (_lum + _sat) - (_lum * _sat);
v1 = 2.0f * _lum - v2;
r = GetElement(v1, v2, (_hue/360.0f) + (1.0f/3.0f));
g = GetElement(v1, v2, (_hue/360.0f));
b = GetElement(v1, v2, (_hue/360.0f) - (1.0f/3.0f));
}
return new Color(r, g, b);
}
private static float GetElement(float v1, float v2, float vH)
{
if (vH < 0.0f)
vH += 1.0f;
else if (vH > 1.0f)
vH -= 1.0f;
if ((6.0f * vH) < 1.0f)
return (v1 + (v2 - v1) * 6.0f * vH);
if ((2.0f * vH) < 1.0f)
return v2;
if ((3.0f * vH) < 2.0f)
return (v1 + (v2 - v1) * 6.0f * ((1.0f/3.0f) - vH));
return v1;
}
Код exicuted в примере программы следующим образом :
float width = GraphicsDevice.Viewport.Width;
float height = GraphicsDevice.Viewport.Height;
spriteBatch.Begin();
for (float x = 0.0f; x < width; x++)
{
for (float y = 0.0f; y < height; y++)
{
HSLColor temp = new HSLColor(((x/width) * 360.0f), 0.5f, (y/height));
DrawPixel(spriteBatch, (int)x, (int)y, temp.toRGB());
}
}
Всего несколько нот: Я использую Microsoft XNA Famework. Я не заинтересован в использовании других библиотек, и даже XNA может быть только темпом, в зависимости от того, каким образом развивается этот движок.
Добро пожаловать на SO. Было бы полезно узнать, что именно вы ожидаете. – m00am