Две строки кода слишком много.
Если у метода есть вторая строка кода, это запах кода. Рефакторинг.
Попробуйте использовать gluLookAt
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
/* use this length so that camera is 1 unit away from origin */
double dist = sqrt(1 / 3.0);
gluLookAt(dist, dist, dist, /* position of camera */
0.0, 0.0, 0.0, /* where camera is pointing at */
0.0, 1.0, 0.0); /* which direction is up */
glMatrixMode(GL_MODELVIEW);
glBegin(GL_LINES);
glColor3d(1.0, 0.0, 0.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(1.0, 0.0, 0.0);
glColor3d(0.0, 1.0, 0.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(0.0, 1.0, 0.0);
glColor3d(0.0, 0.0, 1.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(0.0, 0.0, 1.0);
glEnd();
glFlush();
Результаты в
Мы можем нарисовать куб, чтобы проверить, что параллельные линии действительно параллельны
glPushMatrix();
glTranslated(0.5, 0.5, 0.5);
glColor3d(0.5, 0.5, 0.5);
glutWireCube(1);
glPopMatrix();
Изометрическая проекция - это просто вопрос использования ортогональной проекции с определенным углом поворота.
У вас должна быть возможность выбрать любую из 8 возможных ориентаций с ортогональной проекцией, и получите идеальный изометрический вид вашей модели. Просто следуйте математике в указанной статье Wiki для настройки матрицы представления и выполните ортогональную проекцию для своей матрицы проекции, и все готово.
Возможно, я не совсем правильно разбираюсь в математике, но не могли бы вы просто расположить камеру как он объясняет в этой ссылке Википедии и использует стандартную ортогональную проекцию?
Даже если это не то же самое, стек проекций полностью зависит от вас.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// your isometric matrix here (see math on Wikipedia)
glMatrixMode(GL_MODELVIEW);