绘制3D图形
使用OpenGL ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的顶点数据,而且3D图形需要绘制更多的三角形。
1、立方体
立方体有6个面(12个三角形),左、右、前、后、上、下。共有8个顶点,每个面有4个顶点
2、圆形
圆其实也可以看成以圆心为中心点的三角形扇,如下图所示:
看到圆的内部是一个正多边形,当正多边形的边数(或三角形的个数)足够多的话,我们肉眼看起来就变成了一个圆。
圆心坐标是很容易确定的,这里我们假设圆心坐标为(x , y ),然后设圆的半径为 r 接下来我们需要计算的就是周边的点的坐标,
我们很容易计算出来A点的坐标 :
A点的横坐标为: x + r * cos θ(西塔)
A点的纵坐标为: y + r * sin θ
我们将圆分成 n 份的话,就可以得到每一份的角度的值 ,即 θ的值。通过一个for循环我们就可以很容易的得到所有点的坐标。
3、球形
当正多边形的边数够多,看起来非常像一个圆!于是,我们相同觉得,当正多面体的边数够多,看起来非常像一个球!但是利用正多面体来分割一个球算起来比較麻烦,假设用经纬线的纵横分割方法,算起来要简单非常多!
左右两条经线,上下两条纬线构成一个正方形(近似)。而正方形能够看做是两个三角形构成。这样的分割方法,看起来清晰非常多,纵横经纬两层循环遍历全部顶点。
3.1、球面顶点坐标计算
首先,确认两个遍历方向:
第一层:从Y轴负方向開始,角度不断添加直到Y轴正方向。(时钟6点->5点->4点->3点->2点->1点->12点)
第二层:固定Y值,以Y轴为旋转轴,360度旋转。就可以遍历全部顶点。
例如以下图。a角递增。b角做一个360度变化。
如上图。随意球面上的点。三维坐标 (x0, y0, z0) 计算(球面方程):(R为球半径)
x0 = R * cos(a) * sin(b);
y0 = R * sin(a);
z0 = R * cos(a) * cos(b);