Вы видите точки, потому что рисуете точки с помощью glBegin(GL_POINTS)
.
Попробуйте заменить его на glBegin(GL_LINE_STRIP)
.
ПРИМЕЧАНИЕ: когда вы видели круг, вы также рисовали только точки, но при этом они были нарисованы достаточно близко, чтобы отображаться в виде связного круга.
Кроме того, возможно, вы не настроили буфер глубины для приема значений в диапазоне z = [-50, 310], который вы используете. Эти аргументы должны быть представлены в виде zNear и zFar плоскостей отсечения в вашем вызове gluPerspective
, glOrtho()
или glFrustum()
.
ПРИМЕЧАНИЕ: это объясняет, почему при значении z вы видите только несколько точек: остальные точки обрезаются, потому что они находятся вне диапазона z-буфера.
ОБНОВЛЕНИЕ ПОСЛЕ ТОГО, КАК ВЫ УКАЗАЛЕ свой КОД:
glOrtho(-100*aspectratio,100*aspectratio,-100,100,1,-1);
допускает только z-значения в диапазоне [-1, 1], поэтому будут нарисованы только три точки с z = -1
, z = 0
и z = 1
(таким образом, 3 точки).
Наконец, вы, вероятно, смотрите на спираль сверху, глядя прямо в направлении оси вращения. Если вы не используете перспективную проекцию (но изометрическую), спираль все равно будет отображаться в виде круга. Возможно, вы захотите изменить свой взгляд с помощью gluLookAt()
.
ПРИМЕР НАСТРОЙКИ ПЕРСПЕКТИВНЫЙ
Следующий код взят из отличных руководств по OpenGL от NeHe:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
Тогда в вашем цикле рисования будет выглядеть примерно так:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity();
glTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0
glBegin(GL_TRIANGLES); // Drawing Using Triangles
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd();
Конечно, вы должны изменить этот пример кода для своих нужд.