Итак, я работаю над проектом, который включает в себя создание уже существующего скелетного кода приложения, имитирующего «поток жидкости и визуализацию», и применение к нему различных методов визуализации.
Первый шаг проектазаключается в применении различных методов цветового отображения к трем различным наборам данных, а именно: плотность жидкости (rho), величина скорости жидкости (|| v ||) и величина силового поля || f ||.
В приведенном коде скелета уже есть пример, который я могу изучить, чтобы определить, как наилучшим образом спроектировать и реализовать различные цветовые карты, такие как красно-белая или сине-желтая или что у вас есть.
Фрагмент кода, который я пытаюсь понять, следующий:
//rainbow: Implements a color palette, mapping the scalar 'value' to a rainbow color RGB
void rainbow(float value,float* R,float* G,float* B)
{
const float dx=0.8;
if (value<0) value=0; if (value>1) value=1;
value = (6-2*dx)*value+dx;
*R = max(0.0,(3-fabs(value-4)-fabs(value-5))/2);
*G = max(0.0,(4-fabs(value-2)-fabs(value-4))/2);
*B = max(0.0,(3-fabs(value-1)-fabs(value-2))/2);
}
float value
, передаваемый первым параметром, насколько я могу судить, это плотность жидкости.Я определил это, изучив эти два фрагмента.
//set_colormap: Sets three different types of colormaps
void set_colormap(float vy)
{
float R,G,B;
if (scalar_col==COLOR_BLACKWHITE)
R = G = B = vy;
else if (scalar_col==COLOR_RAINBOW)
rainbow(vy,&R,&G,&B);
else if (scalar_col==COLOR_BANDS)
{
const int NLEVELS = 7;
vy *= NLEVELS; vy = (int)(vy); vy/= NLEVELS;
rainbow(vy,&R,&G,&B);
}
glColor3f(R,G,B);
}
и
set_colormap(rho[idx0]);
glVertex2f(px0, py0);
set_colormap(rho[idx1]);
glVertex2f(px1, py1);
set_colormap(rho[idx2]);
glVertex2f(px2, py2);
set_colormap(rho[idx0]);
glVertex2f(px0, py0);
set_colormap(rho[idx2]);
glVertex2f(px2, py2);
set_colormap(rho[idx3]);
glVertex2f(px3, py3);
С учетом всего сказанного, может кто-нибудь объяснить мне, как работает первый метод?
Вот вывод, когда метод вызывается пользователем и материя вводится в окно с помощью курсора:
Тогда как в противном случае это выглядело бы так (в оттенках серого):