Я использую OpenGL для построения гистограммы изображения RGB. Поскольку это 8-битная гистограмма изображения, мой набор данных содержит точки данных от нуля до 255.
Если я строю гистограмму без использования glScaled(), то график строится, как и ожидалось, но, конечно, не заполняет выделенную область (ширина которой является переменной, высота постоянна). Однако, когда я использую glScaled(), на графике появляются странные артефакты.
Пожалуйста, посмотрите следующие изображения, чтобы увидеть пример проблемы:
На изображении выше показана гистограмма, построенная с 256 точками данных без масштабирования с помощью glScaled().
На двух изображениях выше показана гистограмма, построенная с 256 точками данных И масштабированная с помощью glScaled(). Странные артефакты очевидны (отсутствуют данные?). Обратите внимание, что третья гистограмма имеет немного другую форму из-за изменения уровня освещенности.
Вот соответствующая часть моего кода инициализации OpenGL:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, width, height, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// If this line is removed then the graph plots correctly
// m_scale_factor = width / 256
glScaled(m_scale_factor, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
И вот соответствующая часть моего сюжетного кода:
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glBegin(GL_LINE_STRIP);
for (int n = 0; n < m_histogram_X; n++)
{
glColor4ub(255, 0, 0, 255);
glVertex2i(n, m_Hist_Channel_R[n]);
glVertex2i(n, GRAPH_HEIGHT);
glColor4ub(0, 255, 0, 255);
glVertex2i(n, m_Hist_Channel_G[n]);
glVertex2i(n, GRAPH_HEIGHT);
glColor4ub(0, 0, 255, 255);
glVertex2i(n, m_Hist_Channel_B[n]);
glVertex2i(n, GRAPH_HEIGHT);
}
glEnd()
...
На этом этапе я чувствую, что должен заявить, что я новичок в OpenGL, поэтому, возможно, я неправильно понял многие вещи OpenGL...
Мой вопрос: можно ли исправить эту проблему в OpenGL или мне придется увеличить количество точек данных с помощью какой-то интерполяции, а затем построить без масштабирования?
Я ценю любую предложенную помощь.