gpt4 book ai didi

c++ - OpenGL 视口(viewport)失真

转载 作者:行者123 更新时间:2023-11-28 06:05:53 67 4
gpt4 key购买 nike

我仍然是 OpenGL 的初学者。我正在尝试使用着色器在 1280 x 720 的屏幕上绘制一个完美的正方形。

我使用的是 OpenGL 核心配置文件 3.3 版。当我试图在 1280 x 720 中绘制一个正方形时,我被困住了

enter image description here

经过一段时间的搜索,我意识到尺寸因视口(viewport)尺寸而变形,在将视口(viewport)尺寸更改为 720 x 720 后,我得到了这个。

This is in a viewport with size of 720 by 720

在传统的 OpenGL 中,它们有一个 solution来解决这个问题,但现在它在核心配置文件中已被弃用。

问题:如何仅使用核心配置文件 OpenGL 3.3 在 1280 x 720 屏幕尺寸中绘制一个完美的正方形?

最佳答案

应用投影变换是解决此问题的最标准方法。您几乎可以在任何显示如何将 OpenGL 与着色器结合使用的教程中找到有关如何执行此操作的详细信息。总之,您通常将投影矩阵作为顶点着色器中的统一变量,并将其应用于输入位置:

uniform mat4 ProjMat;
in vec4 InPosition;
...
gl_Position = ProjMat * InPosition;

在您的 C++ 代码中,您计算​​矩阵以应用必要的缩放,并使用 glUniformMatrix4fv() 进行设置。

另一种选择是让视口(viewport)保持正方形。虽然视口(viewport)通常设置为与窗口大小相匹配,但情况并非如此。例如,视口(viewport)可以超出窗口的大小。

要使用这种方法,您需要在设置视口(viewport)以响应窗口(重新)大小事件的代码中使用类似的内容。使用 wh 窗口的宽度和高度:

if (w > h) {
glViewport(0, (h - w) / 2, w, w);
} else {
glViewport((w - h) / 2, 0, h, h);
}

这采用两个窗口尺寸中较大的一个作为视口(viewport)尺寸,并将视口(viewport)扩展到另一个尺寸的窗口之外以产生方形视口(viewport)。

关于c++ - OpenGL 视口(viewport)失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32421262/

67 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com