我遇到了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,0>
是中心, <-1,1>
是左上角)是什么称为标准化设备坐标。它们通常是一个中间坐标空间,像素在投影之后但在视口映射之前。
现在,关于此坐标空间的有趣之处在于,如果使用Projection
和ModelView
的单位矩阵,则可以完全按原样使用这些坐标。也就是说,您永远不需要知道视口的尺寸是什么来绘制完全填充它的六边形。
否则,您应该使用与窗口使用相同尺寸的正交投影矩阵。 glOrtho (...)
是传统的做法......
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (0.0, 500.0, -500.0, 0.0, -1.0, 1.0);
我很好奇,为什么你希望Y坐标在这个例子中的范围从0到-500而不是0到500?