用于2D的OpenGL ES 2.0,如何将原点设置为左上角

时间:2011-10-20 08:05:27

标签: objective-c ipad opengl-es-2.0

我认为之前已经讨论过,但我找不到适合我的答案。

我正在使用OpenGL ES 2.0为iPad开发2D“绘图”应用程序。

我正在使用“iPhone 3D Programming”一书中描述的功能创建一个Ortho Projection Matrix,据我所知矩阵是正确的。函数调用是这样的:

proj = identity.Ortho(-width/2, width/2, -height/2, height/2, -1.0f, 1.0f);

它工作正常,但它将原点放在视口的中心。我需要从用户那里获取触摸信息以便绘画,所以我希望原点位于左上角。

我知道我真的不需要那个,因为我可以减去(宽度/ 2,高度/ 2),但如果原点在TL处则一切都会更容易。

所以我尝试了这个:

proj = identity.Ortho(0, width, 0, height, -1.0f, 1.0f);

但它根本不起作用,如果我绘制一个矩形,我只是看到一些线条或三角形,当我旋转viewModel矩阵时,它就像它变形了。

三江源。

1 个答案:

答案 0 :(得分:4)

identity.Ortho(0, width, 0, height, -1.0f, 1.0f)你走在了正确的轨道上。但是这会将原点定位在左下角(因为它仍然在右手的3d空间中操作,而不是在屏幕空间中,所以y向上,x向右)。相反,只需使用

交换顶部和底部
proj = identity.Ortho(0, width, height, 0, -1.0f, 1.0f);

但请记住,因为这反映了y方向(就像你想要的那样),它将反转你绘制的任何三角形的方向,将逆时针方向的三角形转换为顺时针方向。这不是一个真正的问题,当您根据三角形的方向(例如背面剔除,双面材料......)做事时,您必须牢记这一点,并且可以通过使用{{3切换默认的前端绕线顺序。但是既然你想要做2d,那么三角形方向和背面剔除对你来说不会是那么大的问题。