【问题标题】:Reshape Function For OpenGLOpenGL的重塑函数
【发布时间】:2016-01-08 17:46:42
【问题描述】:

我正在使用鼠标功能在屏幕上绘制正方形,以及我从屏幕上收集的坐标。坐标在 OpenGL 程序正在运行的窗口的像素范围内。因此,为了避免将像素转换为 x 和 y 轴的 -1 到 1 的 opengl 坐标系,我使用了:

glOrtho(0,g_width,0,g_height,0,2200);

在哪里

0,g_width

是绘图坐标的左右值,

0,g_height

是绘图坐标的底部和顶部值, 我相信

0,2200

是要绘制到的坐标的最小值和最大值。

这是我的重塑功能:

void resize(GLsizei w, GLsizei h){
  cout << "Resize..." << endl
       << "W: " << w << endl
       << "H: " << h << endl;
  g_width = w;
  g_height = h;

  glViewport(0,0,g_width,g_height);
  glOrtho(0,g_width,0,g_height,0,2200);
  cout << "Ortho called" << endl;
}

我从函数中获取当前的宽度和高度,我测试了它是否适用于我留下的打印语句,它可以在我缩小或拉伸窗口时工作,但效果似乎没有改变我可以改变的区域在此代码实例中,当我将屏幕拉伸到任何方向时,我无法再在屏幕上绘制正方形,但如果我将其保留在我定义的原始 700*700,它将按照我定义的方式工作。但是 reshape 方法不适用于新的宽度和高度。

有什么想法吗?

【问题讨论】:

    标签: c++ opengl 2d


    【解决方案1】:

    glOrtho当前选定矩阵堆栈的当前顶部矩阵乘以具有给定参数的正交矩阵。但是你不想要那个产品,你只想要这个正交矩阵,所以你应该先打电话给glLoadIdentity()。但是,由于正交矩阵应该是投影矩阵,所以应该先将矩阵模式切换为GL_PROJECTION,然后再切换回GL_MODELVIEW

    但您应该知道,所有这些都已完全弃用。现代 GL 没有矩阵堆栈和glOrtho。您应该使用自己的矩阵函数(或使用诸如 glm 之类的库),并使用顶点着色器将您喜欢的任何变换应用于顶点数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多