истинная изометрическая проекция с opengl

Две строки кода слишком много.

Если у метода есть вторая строка кода, это запах кода. Рефакторинг.

17
задан genpfault 28 June 2011 в 16:11
поделиться

3 ответа

Попробуйте использовать 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();

Результаты в

alt text

Мы можем нарисовать куб, чтобы проверить, что параллельные линии действительно параллельны

glPushMatrix();
glTranslated(0.5, 0.5, 0.5);
glColor3d(0.5, 0.5, 0.5);
glutWireCube(1);
glPopMatrix();

alt text

27
ответ дан 30 November 2019 в 11:32
поделиться

Изометрическая проекция - это просто вопрос использования ортогональной проекции с определенным углом поворота.

У вас должна быть возможность выбрать любую из 8 возможных ориентаций с ортогональной проекцией, и получите идеальный изометрический вид вашей модели. Просто следуйте математике в указанной статье Wiki для настройки матрицы представления и выполните ортогональную проекцию для своей матрицы проекции, и все готово.

8
ответ дан 30 November 2019 в 11:32
поделиться

Возможно, я не совсем правильно разбираюсь в математике, но не могли бы вы просто расположить камеру как он объясняет в этой ссылке Википедии и использует стандартную ортогональную проекцию?

Даже если это не то же самое, стек проекций полностью зависит от вас.

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// your isometric matrix here (see math on Wikipedia)
glMatrixMode(GL_MODELVIEW);
3
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: