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_data
是static
,所以数据只初始化一次,一直保持静态值。
由于x
和y
都没有初始化,数组中的数据在程序开始时由x
和y
的任意随机值设置。
static GLfloat g_vertex_buffer_data[] = {
//0.5f, 0.0f, 0.0f <------ THIS WORKS
x, y, 0.0f
};
使用局部非静态数组并初始化x
和y
解决问题:
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
};
// [...]
请注意,局部变量在循环的每次迭代中由 x
和 y
的当前值设置。
另一种解决方案是在循环之前创建数组,但在循环中更改数组元素的值:
GLfloat g_vertex_buffer_data[] = {
0.5f, 0.0f, 0.0f
};
do
{
g_vertex_buffer_data[0] = x;
g_vertex_buffer_data[1] = y;
// [...]
我在使用 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_data
是static
,所以数据只初始化一次,一直保持静态值。
由于x
和y
都没有初始化,数组中的数据在程序开始时由x
和y
的任意随机值设置。
static GLfloat g_vertex_buffer_data[] = { //0.5f, 0.0f, 0.0f <------ THIS WORKS x, y, 0.0f };
使用局部非静态数组并初始化x
和y
解决问题:
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
};
// [...]
请注意,局部变量在循环的每次迭代中由 x
和 y
的当前值设置。
另一种解决方案是在循环之前创建数组,但在循环中更改数组元素的值:
GLfloat g_vertex_buffer_data[] = {
0.5f, 0.0f, 0.0f
};
do
{
g_vertex_buffer_data[0] = x;
g_vertex_buffer_data[1] = y;
// [...]