Я настоятельно рекомендую работать с Учебными пособиями по NeHe OpenGL , если OpenGL является новым для вас.
glLoadIdentity
сводит на нет эффект glRotate
. Вместо этого используйте glPushMatrix
/ glPopMatrix
для достижения независимых переводов:
glPushMatrix();
glTranslatef((a[0]-1.15)*26, a[2]*30, a[1]*30);
glutSolidSphere(6, 5, 5);
glPopMatrix();
Если сферы больше не видны, вам необходимо предоставить свой код настройки видового экрана и матрицы проекции, чтобы мы могли определить проблему. С другой стороны, если вы вообще не настроили область просмотра и проекцию, то посмотрите учебник выше и исправьте это!
Кроме того, вы поворачиваете матрицу вида модели на 80 градусов при каждом рендеринге сцены. Это ожидаемый результат? Как часто эта функция вызывается? Я хотел бы рассмотреть возможность поддержания желаемого поворота в переменной, а затем загрузить единичную матрицу и поворачивать ее на этот угол вместо каждого прохода. Например:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
angle += angularVelocity * deltaTime;
glRotate(angle, 1, 0, 0);
Также неоднозначно, вызываете ли вы эту функцию только один раз и ожидаете, что вызов glRotate будет постоянно обновлять сцену (очень неверное предположение), или вы вызываете эту функцию несколько раз для визуализации анимированной сцены. Если это первый случай, пожалуйста, прочитайте учебники, на которые я ссылался выше. Если это последний случай, то вам следует рассмотреть возможность выполнения файлового ввода-вывода один раз и создания списка отображения для вызова в цикле рендеринга.