Odr*_*kir 3 objective-c ipad opengl-es-2.0
我认为之前已经讨论过了,但是找不到适合我的答案。
我正在使用OpenGL ES 2.0开发iPad的2D“绘图”应用程序。
我正在使用“ iPhone 3D编程”一书中介绍的功能创建正交投影矩阵,据我所知,矩阵是正确的。函数调用是这样的:
proj = identity.Ortho(-width/2, width/2, -height/2, height/2, -1.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
可以,但是将原点放在视口的中心。我需要从用户处获取触摸信息以进行绘画,因此我希望原点位于左上角。
我知道我并不需要,因为我可以减去(宽度/ 2,高度/ 2),但是如果原点位于TL,一切都会变得更加容易。
所以我尝试了这个:
proj = identity.Ortho(0, width, 0, height, -1.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
但这根本不起作用,如果我绘制一个矩形,则在旋转viewModel Matrix时会看到一些线或三角形,这就像它会变形一样。
谢谢。
与identity.Ortho(0, width, 0, height, -1.0f, 1.0f)您一起走上正确的道路。但这会将原点定位在左下角(因为它仍在右手3d空间中而不是在屏幕空间中工作,因此y向上而x向右)。相反,只需使用
proj = identity.Ortho(0, width, height, 0, -1.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
但是请记住,由于这反映了y方向(如您所愿),因此它将反转您绘制的任何三角形的方向,从而将逆时针方向的三角形变成顺时针方向的三角形。这是不是一个真正的问题,你只需要你的时候基于一个三角形的方向(例如,背面剔除,双面材料,...)做的事情,可以通过使用占到记住这一点glFrontFace切换默认的正面绕线顺序。但是,由于您要进行2d操作,因此无论如何,三角形方向和背面剔除对您来说都不是什么大问题。
| 归档时间: |
|
| 查看次数: |
3117 次 |
| 最近记录: |