繁体   English   中英

在JOGL OpenGL中转换为像素坐标

[英]Convert to pixel coordinates in JOGL OpenGL

我遇到了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)));
    }

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

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

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

这些坐标( 其中 <0,0> 是中心,而 <-1,1> 是左上角 )被称为“规范化设备坐标”。 它们通常是像素在投影之后但在视口映射之前所在的中间坐标空间。

解释投影和视口映射的图

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

否则,您应使用与窗口尺寸相同的正投影投影矩阵。 glOrtho (...)是执行此操作的传统方法...

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

我很好奇,为什么在此示例中,您希望Y坐标的范围是0到-500,而不是0到500?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM