【问题标题】:Call opengl function on resize在调整大小时调用 opengl 函数
【发布时间】:2017-07-01 14:29:01
【问题描述】:

我想在调整大小时调用 openGL 函数以使游戏响应。

我有这个功能:

void Game::changeSize(int w, int h) {

    if (h == 0)
        h = 1;

    float ratio =  w * 1.0 / h;

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glViewport(0, 0, w, h);

    gluPerspective(45.0f, ratio, 0.1f, 100.0f);

    glMatrixMode(GL_MODELVIEW);
}

我在主循环中用 changeSize(m_width, m_height) 调用它。 它设置视口,但在 framebuffer_size_callback GLFW 上我无法设置新的宽度和高度。

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    Game game;
    game.changeSize(width, height);
}

如何让它发挥作用?

谢谢

【问题讨论】:

  • 为什么要在回调中创建一个新的Game 实例?这是某种形式的单例类吗?
  • 在另一个类中使用 void。
  • 为什么投反对票?

标签: opengl resize glfw


【解决方案1】:

我通过在 0 上设置一个整数来修复它,以在尚未调整大小的情况下执行该函数。

例如,

int resize = 0;

if(resize == 0){
game.changeResize(window, m_width, m_height);
}

//in the resize callback function
resize = 1;

game.changeResize(window, width, height);

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多