1

我正在寻找一些(非弃用代码)OpenGL示例,它们实际上以使用非标准坐标的2D方式在从开始到结束的坐标之间逐步显示代码/转换。IE

GLfloat Square[] = 
{
    -5.5f, -5.0f, 0.0f, 1.0f,
    -5.5f,  5.0f, 0.0f, 1.0f,
    5.5f,  5.0f, 0.0f, 1.0f,
    5.5f, -5.0f, 0.0f, 1.0f
};

然后使用上述坐标,将它们转换为必要的坐标,以便它们映射到 -1,1 等并输出到屏幕。

我在网上找到的每个示例、教程等,都只能使用上述 -1<>1 范围内的坐标。

环境:C++。

4

2 回答 2

1

好吧,如果您使用 glm ( http://glm.g-truc.net/index.html ),您可以使用 glm::ortho 来创建视图矩阵,就像在旧式 OpenGL 中使用 glOrtho 一样。

例如:

glm::mat4 viewMatrix = glm::ortho(-5.0f, 5.0f, -5.0f, 5.0f, 0.0f, 1.0f);

如果你然后将它插入你的着色器,你应该得到一个从 -5 到 +5 而不是 -1 到 +1 的映射,或者你想要的任何比例。

于 2013-04-19T14:33:36.867 回答
1

当您在项目中使用“无”转换时,您只需使用放置在“标准化设备空间”中的坐标。这实际上是一个在每个轴上范围从 -1 到 1 的框。

在这种情况下,在顶点着色器中会有类似这样的行:

gl_Position = attribVertexPos; // no transformation

对于 2D,如果你想提供不同范围的坐标,你需要做的只是缩放位置:

  • 对于范围 -10 到 10,使用带有代码的顶点着色器gl_Position = attribVertexPos * 0.1
  • 或者你可以寻找一个缩放矩阵并使用它
于 2013-04-19T13:48:06.313 回答