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

sam*_*moz 11 opengl graphics viewport

我正在绘制几个从窗口高度和宽度键入的形状(例如圆圈).由于窗口始终以给定大小开始,因此它们被正确绘制,但是当窗口调整大小时,它会使宽高比混乱.

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

Gre*_*g S 15

您绝对不希望明确依赖于窗口大小使对象的大小.

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

关于窗口调整大小的事情:

  1. 调整视口

    glViewport(0, 0, width, height)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 调整剪刀矩形(仅在GL_SCISSOR_TEST启用时)

    glScissor(0, 0, width, height)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 调整投影矩阵

    在遗留(固定功能管道)OpenGL的情况下,您可以通过以下方式执行此操作:

    glFrustum(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    glOrtho(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    gluOrtho2D(left * ratio, right * ratio, bottom, top)
    
    Run Code Online (Sandbox Code Playgroud)

    (假设left, right, bottom并且top都相等ratio=width/height)


gen*_*ult 5

如果您使用的是gluPerspective()之类的东西,请使用窗口的宽/高比:

gluPerspective(60, (double)width/(double)height, 1, 256);
Run Code Online (Sandbox Code Playgroud)