转换为JOGL OpenGL中的像素坐标

时间:2013-08-24 22:54:04

标签: java opengl jogl

我遇到了OpenGL坐标系的问题。

我有一个使用此代码创建六边形的小类:

    for(int i = 0; i < 6; ++i) {
        gl.glVertex2d(radius * Math.sin(i/6.0*2*Math.PI)-(radius*(x*1.75)),
                 radius * Math.cos(i/6.0*2*Math.PI)+(radius*(y*1.25)));
    }

注意,所有这些都是在使用JOGL库的java中。

创建六边形时,它们的坐标系统的屏幕中心为0,0,左上角设置为-1,1

我想将这些坐标转换为屏幕坐标,因此左上角是0,0,中间是windowX / 2,-windowY / 2。因此,如果窗口是500像素乘500像素,则中心将是250,-250。

1 个答案:

答案 0 :(得分:0)

那些坐标( <0,0> 是中心, <-1,1> 是左上角)是什么称为标准化设备坐标。它们通常是一个中间坐标空间,像素在投影之后但在视口映射之前。

Diagram explaining projection and viewport mapping

现在,关于此坐标空间的有趣之处在于,如果使用ProjectionModelView的单位矩阵,则可以完全按原样使用这些坐标。也就是说,您永远不需要知道视口的尺寸是什么来绘制完全填充它的六边形。

否则,您应该使用与窗口使用相同尺寸的正交投影矩阵。 glOrtho (...)是传统的做法......

glMatrixMode   (GL_PROJECTION);
glLoadIdentity ();
glOrtho        (0.0, 500.0, -500.0, 0.0, -1.0, 1.0);

我很好奇,为什么你希望Y坐标在这个例子中的范围从0到-500而不是0到500?