android opengles 坐标系 旋转改变 视角位置
OpenGL中的6种坐标系
OpenGL中存在6种坐标系,
1. Object or model coordinates
2. World coordinates
3. Eye (or Camera) coordinates
4. Clip coordinates
5. Normalized device coordinates
6. Window (or screen) coordinates
经常用到的 世界坐标 物体坐标, 屏幕坐标 ,眼坐标
物体坐标是以物体某一点为原点而建立的“世界坐标”,该坐标系仅对该物体适用,用来简化对物体各部分坐标的描述。物体放到场景中时,各部分经历的坐标变换相同,相对位置不变,所以可视为一个整体,与人类的思维习惯一致。
眼坐标是以视点为原点,以视线的方向为Z+轴正方向的坐标系中的方向。OpenGL管道会将世界坐标先变换到眼坐标,然后进行裁剪,只有在视线范围(视见体)之内的场景才会进入下一阶段的计算。
同样的,有投影变换矩阵栈(Projection),栈顶矩阵就是当前投影变换矩阵,负责将场景各坐标变换到眼坐标,由所得到的结果是裁剪后的场景部分,称为裁剪坐标。前面提到过的视见体设定其实就是在建立该矩阵。
设备坐标:OpenGL 的重要功能之一就是将三维的世界坐标经过变换、投影等计算,最终算出它在显示设备上对应的位置,这个位置就称为设备坐标。在屏幕、打印机等设备上的坐标是二维坐标。值得一提的是,OpenGL可以只使用设备的一部分进行绘制,这个部分称为视区或视口(viewport)。投影得到的是视区内的坐标(投影坐标),从投影坐标到设备坐标的计算过程就是设备变换了。
坐标其实跟现实世界中差不多,我们可以把自己当成当前的 相机(眼), 看向某 一个物体, 而所处的空间就是世界。
举个例子, opengl 中的旋转 可以采用 gl.glRotatef(30, 1, y, z) 物体绕着自身 X轴 旋转, 此时是以 世界为参照物
而当我们的 眼睛 绕着物体旋转时,如果以我们的眼睛为参照物 , 可以认为 是 物体自身在旋转,
其它方法跟上篇一样
一 物体本身旋转