【问题标题】:Make Square Fill Entire Window使正方形填充整个窗口
【发布时间】:2014-03-10 02:43:45
【问题描述】:

如何确定在现代 OpenGL 中使正方形填充整个窗口所需的变换。例如,我有一个 800 x 600 的窗口,两个三角形的顶点坐标从 -1 和 1 延伸。如果没有任何类型的变换,这些坐标将填充 800 x 600 的窗口,因为 OpenGL 的坐标从 -1 延伸到 1 . 但是,如果我想使用标准 MVP 转换怎么办?我如何确定需要做什么才能填满整个窗口。考虑这段代码:

glm::mat4 projectionMatrix = glm::perspective(60.0f, 4.f/3.f, 0.1f, 100.0f); // gluPerspective equivalent for those who may not know about glm
glm::mat4 viewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.0f));;
glm::mat4 modelMatrix = glm::mat4(1.0f);

具有相同的坐标。我现在会在窗口中间的某个地方得到一个正方形。假设我不更改投影矩阵,需要对 View 和 Model 矩阵进行哪些更改?我了解矩阵数学,但不了解它与窗口坐标本身的关系。

谁能帮我理解这个?

【问题讨论】:

    标签: opengl opengl-3 projection-matrix


    【解决方案1】:

    对于 2D 元素(如 HUD),我通常设置一个正交矩阵,其中 left = 0、right = width、bottom = 0、top = height,其中宽度和高度是窗口的大小。 znear = -1 和 zfar = 1。

    那么您的矩形顶点将位于 0、0、宽度和高度。

    这就是你想要的吗?我不确定为什么要为填充屏幕的矩形使用透视矩阵。

    【讨论】:

    • 我一直无法让 Ortho 工作。为什么不这样: glm::mat4 projectionMatrix = glm::ortho(0.f, 800.f, 0.f, 600.f, -1.f, 1.f); glm::mat4 viewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, 0.0f));; glm::mat4 modelMatrix = glm::mat4(1.0f) 显示具有上述坐标的正方形?谢谢!
    猜你喜欢
    • 2021-12-19
    • 2018-10-21
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多