【问题标题】:Creating Shapes Relative to World Position, Not Screen Position [duplicate]创建相对于世界位置而不是屏幕位置的形状[重复]
【发布时间】:2019-02-04 16:57:44
【问题描述】:

我是 OpenGL 的新手,我希望创建一个 2D 游戏。我发现了如何使用glBegin()glVertex2f()glEnd() 创建形状。但是,当我使用它时,它使用屏幕位置作为坐标(当我使用非方形显示时,形状会被拉伸)。

所以我想知道的是,我将如何创建相对于世界位置的形状,这样它就不会延伸到屏幕上(glm::vec2 可能)?

【问题讨论】:

  • 我知道这不是一个完全的重复,但最终将使用相同的 OpenGL API 函数glOrtho(),只是通过 C++ 接口而不是 Java。
  • 谢谢,glOrtho 似乎工作了。

标签: c++ opengl glm-math


【解决方案1】:

注意,由glBegin/glEnd 序列和固定函数矩阵堆栈绘制的绘图自几十年以来已被弃用。请参阅 Fixed Function PipelineLegacy OpenGL。 阅读Vertex SpecificationShader,了解最先进的渲染方式。


在 OpenGL 中,[-1, 1] 范围内的标准化设备坐标映射到视口。投影矩阵将顶点坐标从视图空间转换为剪辑坐标。这些剪辑坐标也通过除以剪辑坐标的 w 分量转换为标准化设备坐标 (NDC)。

默认情况下,固定函数矩阵堆栈上的投影矩阵是单位矩阵。这导致视图空间坐标到标准化设备坐标的 1:1 映射。如果视口是矩形的,则在设置投影矩阵时必须考虑这一点。

orthographic projection可以通过glOrtho设置:

例如:

double aspect = (double)width/(double)height;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);

【讨论】:

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