#opengl #glfw
#opengl #glfw
Вопрос:
Скорее всего, это не проблема, а особенность конфигурации окна перед его созданием, но у меня следующая проблема. Сразу после запуска моего приложения моя модель смещается и растягивается, но она сразу же встает на место, как только я начинаю изменять размер окна. Я написал следующий обратный вызов для изменения размера окна:
void framebuffer_size_callback(GLFWwindow *window, int w, int h) {
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
else
glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Сразу после запуска приложения GLFW:
У меня не было подобных проблем с перенасыщением…
Комментарии:
1. Если кого-нибудь интересует полный код: github.com/glfw/glfw/issues/1767
2. Я не вижу, где вы устанавливаете свой
GL_PROJECTION
, кроме как из вашей функции изменения размера. Вероятно, вам также следует сделать это при запуске программы3. @Thrasher, я добавил glMatrixMode (GL_PROJECTION); glLoadIdentity(); (и даже скопировал полный код обратного вызова в цикле рендеринга с фиксированными значениями w = 800 и h = 600), но ничего не изменилось. Я новичок в OpenGL, так что, возможно, я вас неправильно понял.
4. Прошу прощения. Но нет времени подробно просматривать ваш код. Но я почти уверен, что ваш опубликованный код не является проблемой.
Ответ №1:
Я использовал glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE)
для правильного размера окна на дисплее с высоким разрешением Retina, но для вызова glViewport()
я пропускаю старые немасштабированные ширину и высоту. Решение заключается в том, чтобы получить текущий размер буфера кадров с помощью glfwGetFramebufferSize()
и передать эти размеры glViewport()
вместо этого, и он должен отображаться правильно.