Вопрос

У меня есть следующий код OpenGL в функции отображения:

glLoadIdentity();
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
// called as: gluLookAt(20, 5, 5, -20, 5, 5, 0, 1, 0);

axis();
glutWireCube (1.);

glFlush ();

axis() рисует линии от (0,0,0) до (10,0,0), (0,10,0) и (0,10,0), а также линию от (1,0,0) до (1, 3,0).

Моя функция изменения формы содержит следующее:

glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45.0, (GLsizei) w / (GLsizei) h, 1.0, 100.0);
glMatrixMode (GL_MODELVIEW);

На этом изображении показан результат запуска программы с 1. в качестве аргумента glutWireCube:

glutWireCube(1.)

Как вы можете видеть, куб не центрирован вокруг (0,0,0), как указано в документации:

Куб центрируется по центру моделирования Начало координат (...) (источник)

Если я запускаю программу с 5. в качестве аргумента куб смещается еще дальше:

glutWireCube(5.)

Почему это так и как разместить кубики вокруг точки (0,0,0)?

ДАЛЬНЕЙШАЯ ИНФОРМАЦИЯ

Не имеет значения, изменю ли я порядок axis() и glutWireCube.Окружающий axis() с glPushMatrix() и glPopMatrix() тоже не исправляет.

РЕШЕНИЕ

я изменил gluPerspective начать смотреть дальше от камеры, и теперь Z-буферизация работает правильно, поэтому видно, что кубы располагаются вокруг начала координат.

Это было полезно?

Решение

Вы уверены, что ось не мешает матрице вида?

Что произойдет, если вы вызовете его после рисования куба?

Изменить, чтобы добавить:

На самом деле...Глядя на картинку поближе, кажется, что так оно и есть. быть сосредоточено в начале координат.

Кажется, что центр куба точно совпадает с пересечением трех осей.Единственное, что выглядит подозрительно, это то, что красная линия не пишется поверх белого края.правильно ли у вас настроена Z-буферизация?

Другие советы

Может быть и правильно, думаю, сложно определить из-за ракурса...Но я думаю, это не от того, что я пристально на него смотрю.

Чтобы быстро исключить это axis() не изменяет матрицу представления модели, окружите вызов матрицей push/pop:

glPushMatrix();
axis();
glPopMatrix();

Что следует изучить/проверить:

  1. Это все окно?Кажется странным, что вид внизу в одном углу.
  2. Поможет ли добавление увеличивающегося вращения перед рендерингом?Это может облегчить определение перспективы, давая больше подсказок.
  3. Вы также можете попробовать переместить «камеру», изменив аргументы на gluLookAt() динамически.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top