OpenGL - 正确读取光标位置但无法从中画线

OpenGL - Reading cursor position correctly but cant draw line from it

我在使用 C++ 中的 OpenGL 教程时遇到问题。我尝试在鼠标单击时画线,其中一条边为 0.0,第二条边为光标位置。当我手动设置值时,它可以正确绘制,但是当我使用代表光标位置的变量时,它根本不会绘制。

这是我读取光标位置的回调函数。

GLfloat x;
GLfloat y;

static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos) {
    x = xpos / (1024 / 2) - 1.0;
    y = ypos / (768 / 2) - 1.0;
}

这是我将变量传递给绘图的地方

do{
    // Calculate position
    static GLfloat g_vertex_buffer_data[] = { 
        //0.5f, 0.0f, 0.0f <------ THIS WORKS
        x, y, 0.0f
     };

    std::cout << x << " " << y << std::endl;

    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);

    ...

    // Draw the triangle !
    // if mouse clicked
    if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) {
        glDrawArrays(GL_LINES, 0, 2); 
    }

如有任何帮助,我将不胜感激!

数组g_vertex_buffer_datastatic,所以数据只初始化一次,一直保持静态值。
由于xy都没有初始化,数组中的数据在程序开始时由xy的任意随机值设置。

static GLfloat g_vertex_buffer_data[] = { 
       //0.5f, 0.0f, 0.0f <------ THIS WORKS
       x, y, 0.0f
    };

使用局部非静态数组并初始化xy解决问题:

GLfloat x = 0.0f;
GLfloat y = 0.0f;
do{
    // Calculate position
    GLfloat g_vertex_buffer_data[] = { 
        //0.5f, 0.0f, 0.0f <------ THIS WORKS
        x, y, 0.0f
    };

    // [...]

请注意,局部变量在循环的每次迭代中由 xy 的当前值设置。

另一种解决方案是在循环之前创建数组,但在循环中更改数组元素的值:

GLfloat g_vertex_buffer_data[] = { 
    0.5f, 0.0f, 0.0f
};

do
{
    g_vertex_buffer_data[0] = x;
    g_vertex_buffer_data[1] = y;

    // [...]