Преобразовать число с плавающей запятой в вектор RGB - PullRequest
0 голосов
/ 15 марта 2019

Мне нужно визуализировать пару кубов с помощью opengl, и цвет каждого куба зависит от магнитного поля в центре куба, но я не знаю, как преобразовать число с плавающей точкой в ​​QVector3D илиglm::vec3 (RGB).

И я могу преобразовать диапазон массива с плавающей запятой от 0 до 1. need Мне нужно знать, как преобразовать массив магнитного поля в RGB, чтобы определить массив цветов.

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Если я правильно понимаю, вы хотите представить значение с плавающей запятой в диапазоне [0.0, 1.0] цветом RGB.
Я рекомендую преобразовать значение в цветовой диапазон HSV .

Для полного диапазона преобразование:

float value = ...; // value in range [0.0, 1.0]

float H = value;
float R = fabs(H * 6.0f - 3.0f) - 1.0f;
float G = 2.0f - fabs(H * 6.0f - 2.0f);
float B = 2.0f - fabs(H * 6.0f - 4.0f);  

glm::vec3 color( 
    std::max(0.0, std::min(1.0, R))
    std::max(0.0, std::min(1.0, G))
    std::max(0.0, std::min(1.0, B)));

Если вам не нужен полный диапазон, например, если вы хотите использовать диапазон от красного до синего, то value необходимо масштабировать:

float H = value * 2.0f/3.0f;
0 голосов
/ 15 марта 2019

Вам нужна некоторая форма таблицы поиска (LUT). Вектор RGB имеет 3 измерения, один поплавок - только один. Буквально бесконечное количество способов сопоставления между этими двумя.

...