Я пытаюсь создать несколько демоверсий, чтобы помочь мне понять OpenGL, GLEW и GLFW. Я нашел что-то интересное, что я не могу исправить. Я пытаюсь сделать простой набор шахматной доски.Как установить пиксельные координаты для совпадения оконных коордов в GFLW3
float points[] = {
0.0f, 1000.0f, 0.0f,
500.0f, 500.0f, 0.0f,
0.0f, 500.0f, 0.0f,
0.0f, 1000.0f, 0.0f,
500.0f, 500.0f, 0.0f,
500.0f, 1000.0f, 0.0f,
1000.0f, 0.0f, 0.0f,
500.0f, 500.0f, 0.0f,
1000.0f, 500.0f, 0.0f,
1000.0f, 0.0f, 0.0f,
500.0f, 500.0f, 0.0f,
500.0f, 0.0f, 0.0f
};
Если я создаю окно с начальным размером 1000,1000:
GLFWwindow* window = glfwCreateWindow(1000, 1000, "Simple example", NULL, NULL);
шахматной доске отображается корректно:
однако если я создаю окно первоначально с 640,480 размера измените его размер, я получаю следующее изображение:
Я попробовал несколько различных способов изменения размера, это казалось самым простым:
int FB_width, FB_height;
glfwGetFramebufferSize(window, &FB_width, &FB_height);
int win_width, win_height;
glfwGetWindowSize(window, &win_width, &win_height);
float width = 1000;
float height = 1000;
glfwSetWindowSize(window, width, height);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfwSwapBuffers (window);
где:
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
Я попытался создать окно больше первоначально (1200,1600), а затем уменьшая размер (640, 480) и затем снова увеличивая его до 1000,1000: одни и те же результаты. Я знаю, что есть разница между координатами окна и координатами пикселей, однако я думал, что они будут коррелированы с функцией обратного вызова.
Я не видел способ напрямую установить размер фреймбуфера, есть ли что-то еще, что нужно сделать?