Проблема прорисовки сплайнов OpenGL
На некоторых компьютерах не отображаются сплайны OpenGL. Возможно, проблема в видеокарте?
Код:
… …
// Количество контрольных точек.
const int g_QuantityOfPoints = 30;
// Указатель на массив контрольных точек.
float *g_ControlsPoints;
… …
void CBezier2DView::OnDraw(CDC* /*pDC*/)
{
int k;
float t;
// Очистка буфера цвета.
glClear (GL_COLOR_BUFFER_BIT);
// Рисуем контрольные точки
glColor3f(0.1f, 0.1f, 0.9f);
glBegin(GL_POINTS);
for (k = 0; k < g_QuantityOfPoints; k++)
glVertex3fv(&g_ControlsPoints[k*3]);
glEnd();
glEnable(GL_MAP1_VERTEX_3);//отображаем сплайн
glMap1f (
// Контрольные точки задаются тремя координатами
GL_MAP1_VERTEX_3,
// Нижнее значение параметрической координаты u
0.,
// Верхнее значение параметрической координаты u
1.0,
// Шаг между контрольными точками
3,
// Количество контрольных точек
g_QuantityOfPoints,
// Массив контрольных точек
(const float*)g_ControlsPoints
);
// Рисуем кривую Безье
glColor3f(0.7f, 0.1f, 0.1f);
glBegin(GL_LINE_STRIP);
for (k = 0; k <= 60; k++)
{
// Вычисляем параметрическую координату, диапазон
// изменения которой, задан командой glMap1f.
t = (GLfloat)k/60.0;
glEvalCoord1f(t);
}
glEnd();
// До сих пор рисование осуществлялось в буфер freim(а).
// После окончания рисования перемещаем изображение на
// экран.
SwapBuffers(::wglGetCurrentDC());
}