opengl - 在 OpenGL 中,如何调整正在调整大小的窗口?

标签 opengl graphics viewport

我正在绘制几个与窗口高度和宽度无关的形状(例如圆形)。由于窗口总是以给定的大小开始,它们被正确绘制,但是当窗口被调整大小时,它会弄乱纵横比。

无论窗口大小如何,如何正确绘制形状?

最佳答案

您绝对不想让对象的大小显式依赖于窗口大小。

正如 genpfault 已经建议的那样,只要窗口大小发生变化,就调整投影矩阵。

调整窗口大小时要做的事情:

  • 调整视口(viewport)
    glViewport(0, 0, width, height)
    
  • 调整剪刀矩形 (仅当您启用了 GL_SCISSOR_TEST 时)
    glScissor(0, 0, width, height)
    
  • 调整投影矩阵

    对于遗留(固定功能管道)OpenGL,您可以通过以下方式进行操作:
    glFrustum(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    

    或者
    glOrtho(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    

    或者
    gluOrtho2D(left * ratio, right * ratio, bottom, top)
    

    (假设 left, right, bottomtop 都相等并且 ratio=width/height )
  • 关于opengl - 在 OpenGL 中,如何调整正在调整大小的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267243/

    相关文章:

    c++ - 从深度缓冲区值获取世界位置

    c++ - OpenGL - 正确地将 VAO 定义与 VBO 和其他缓冲区创建分开

    opengl - 统一点数组和管理片段着色器坐标系

    c++ - 非常容易使用用于 directx 或 opengl 的 2d(可选 3d)绘图库/包装器?

    jquery - 基于视口(viewport)的div定位

    javascript - 如何使用javascript检查视口(viewport)是否小于特定宽度?

    c++ - SDLSurface 的 OpenGL 纹理太暗

    java - 使用 JPanel、2D Graphics 和 MouseListener 时遇到问题

    java - 如何设置我的图形以便用户可以更改大小并保持比例?

    javascript - 元视口(viewport)标签脚本不起作用