c++ - 创建相对于世界位置而非屏幕位置的形状
问题描述
我是 OpenGL 的新手,正在寻找创建 2D 游戏。我发现了如何使用 和 来glBegin()
创建glVertex2f()
形状glEnd()
。但是,当我使用它时,它使用屏幕位置作为坐标(当我使用非方形显示时,形状会被拉伸)。
所以我想知道的是,我将如何创建相对于世界位置的形状,所以它不会延伸到屏幕(可能使用glm::vec2
)?
解决方案
请注意,由glBegin
/glEnd
序列绘制和固定函数矩阵堆栈自几十年以来已被弃用。请参阅固定功能管道和旧版 OpenGL。阅读有关顶点规范和着色器的信息,了解最先进的渲染方式。
在 OpenGL 中,[-1, 1] 范围内的标准化设备坐标映射到视口。投影矩阵将顶点坐标从视图空间转换为剪辑坐标。这些剪辑坐标也通过除以剪辑坐标的 w 分量转换为标准化设备坐标 (NDC)。
默认情况下,固定函数矩阵堆栈上的投影矩阵是单位矩阵。这导致视图空间坐标到标准化设备坐标的 1:1 映射。如果视口是矩形的,则在设置投影矩阵时必须考虑这一点。
例如:
double aspect = (double)width/(double)height;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);
推荐阅读
- angular - 基于可观察的服务
- vba - 使用宏 + IF 公式 + 静态日期?
- javascript - Underscore.js 为什么使用“switch”而不是“for循环”来处理案例
- java - \G 如何在 PCRE 后视中工作
- redis - 如何配置 redis sentinels 将恢复的节点作为主节点带回?
- javascript - 解析 json 返回无效对象
- scala - 在火花中将多行卷成单行和列
- c# - 当 X 轴大于 6 时移动 X 轴 C# Unity
- python - 在 mollweide 投影上显示带有绘图的颜色条
- asp.net-mvc - mvc 完整日历删除事件