Я пытаюсь визуализировать двумерную полуплоскость в 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.