OpenGL转换/翻译/规范化坐标?

时间:2013-04-19 13:21:34

标签: c++ opengl

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

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 ++。

2 个答案:

答案 0 :(得分:1)

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

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

gl_Position = attribVertexPos; // no transformation

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

  • 对于范围-10到10,使用代码为gl_Position = attribVertexPos * 0.1
  • 的顶点着色器
  • 或者您可以查找缩放矩阵并使用它

答案 1 :(得分:1)

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

EG:

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

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