# OpenGL ES 中的坐标变换
# OpenGL ES 中的坐标系
- 世界坐标系
- 纹理坐标系
- 物体坐标系
- 眼坐标系或相机坐标系
- 裁剪坐标系
- 屏幕坐标系
# 世界坐标系
世界坐标系是 OpenGL 中描绘三位空间的坐标系
# 纹理坐标系
一种假象的坐标系
可以叫 UV 坐标系
一个纹理的纹理坐标左上角为(0,0),右下为(1,1),坐标用浮点数表示
[外链图片转存中...(img-RtLrvTin-1648314227884)]
# 物体坐标系
相对于单个物体的坐标系
# 相机坐标系
相机坐标系是以相机为原地,相机观察方向 z 轴向内为正方向的坐标系
# 裁剪坐标系
将相机坐标系乘以 ProjectionMatrix 就可以得到裁剪坐标系
# 屏幕坐标系
最终显示到屏幕上的坐标系
# 坐标变换
# 在 Android 进行 OpenGLES 的坐标矩阵变换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24float ModelMatrix = new float[16];//一个4*4矩阵
float ViewMatrix = new float[16];
float ProjectionMatrix = new float[16];
float MVPMatrix = new float[16];
float eyeX = 0f;
float eyeY = 0f;
float eyeZ = -5f;
float lookAtX = 0f;
float lookAtY = 0f;
float lookAtZ = 0f;
float upX = 0f;
float upY = 1f;
float upZ = 0f;
//设置ViewMatrix矩阵,up为垂直于视线的向量
Matrix.setLookAtM(ViewMatrix,0,eyeX,eyeY,eyeZ,lookAtX,lookAtY,lookAtZ,upX,upY,upZ);
//矩阵乘以矩阵
Matrix.multiplyMM();
//矩阵乘以向量
Matrix.multiplyMV();