2013-08-24 30 views
0

我遇到了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。

回答

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?

相关问题