创建形状相对于世界的位置,不是画面位置[复制]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我有点新的OpenGL和我希望创造一个2D游戏。我已经找到了如何创建与glBegin()glVertex2f()glEnd()形状。然而,当我使用这个时,它使用该坐标的屏幕位置(当我使用非正方形显示,形状被拉伸)。

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

c++ opengl glm-math
1个回答
0
投票

注意,通过glBegin/glEnd序列,其附图和固定功能矩阵堆栈已经从几十年弃用。见Fixed Function PipelineLegacy OpenGL。阅读关于Vertex SpecificationShader用于渲染的艺术方式的状态。


在OpenGL的归一化设备坐标范围[-1,1]被映射到视口。投影矩阵变换顶点从视图sapce到夹子坐标坐标。的这些夹子坐标由与夹子坐标的w成分除以也变换到归一化设备坐标(NDC)。

默认情况下,固定的功能矩阵堆栈上的投影矩阵是单位矩阵。这就导致了一个1:视空间1贴图坐标归一化设备坐标。如果视口是矩形的这个具有设定投影矩阵时需要考虑。

一个orthographic projection可以通过glOrtho设置:

e.g:

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

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.