OpenGL: треугольники с точками на бесконечности - PullRequest
5 голосов
/ 20 октября 2010

Я пытаюсь визуализировать двумерную полуплоскость в OpenGL со следующим кодом:

void renderHalfplane(double *x, double *n)
{
  glPushMatrix();
  double theta = -360.0 * atan2(n[0], n[1])/(2.0*PI);

  glTranslated(x[0], x[1], 0);
  glRotated(theta, 0, 0, 1.0);

  glBegin(GL_TRIANGLES);
  glVertex4d(0.0, 0.0, 0.0, 1.0);
  glVertex4d(1.0, 0.0, 0.0, 0.0);
  glVertex4d(0.0,-1.0, 0.0, 0.0);
  glVertex4d(0.0, 0.0, 0.0, 1,0);
  glVertex4d(-1.0,0.0, 0.0, 0.0);
  glVertex4d(0.0,-1.0, 0.0, 0.0);
  glEnd();

  glPopMatrix();
}

Здесь я использую однородные координаты для рисования треугольников с двумя вершинами на «бесконечности».

Этот код работает как чудо на моем компьютере, но пользователь сообщает, что он неправильно отображает их: вместо бесконечной полуплоскости они видят два (конечных) треугольника.

Является ли мое использование w-координаты 0 неопределенным поведением? Это то, что работает только на некоторых версиях OpenGL? Я попытался просмотреть спецификации Khronos OpenGL, но не смог найти раздел, в котором был бы отрисован примитив с w-координатой 0.

1 Ответ

1 голос
/ 20 октября 2010

Я проверил это на моей машине (nVidia Quadro), и он отображается правильно. Я нашел примеры кода (для теневых объемов), которые масштабируют координату W до бесконечности, которые также отлично работают.

Я предполагаю, что это проблема с драйвером или что-то внешнее по отношению к этому коду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...