同时显示三角形和矩形,同时移动它们,即坐标转换。将物体设置为多重颜色,即彩色。
模型转换 在 OpenGL ES 中,对模型的转换有三种不同类型,分别是: 1.Translate 移动模型的坐标,方法:glTranslate() 2.Rotate 在 x, y, z 坐标轴上进行旋转,方法:glRotatef()。 3.Scale 改变物体的尺寸,主要应用于在 3D 空间中的 2D 投影,方法:glScalef()。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //工作在顶点模式下 glMatrixMode(GL_MODELVIEW); //重置所有的状态 glLoadIdentity(); glTranslatef(-1.5, 0.0, -6.0); glRotatef(rate, 1.0, 0.0, 0.0); glVertexPointer(3, GL_FLOAT, 0, triangleVertices); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_TRIANGLES, 0, 3); glLoadIdentity(); glTranslatef(1.5, 0.0, -6.0); glRotatef(rate, 0.0, 0.0, 1.0); glVertexPointer(3, GL_FLOAT, 0, squareVertices); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
首先我们必须设置 OpenGL 工作在 顶点模式 下,我们之前使用的是投影模式,对于坐标转换来说,还是需要 顶点模式。 glLoadIdentity() 为重置所有状态值,不使用这个方法的话,状态偏移将会不断的增加,发生在 z 轴上的移动越来越大,直到模型偏离我们消失不见。
模型多重颜色 模型的着色,实际上也是顶点的着色,我们通过给三角形每个顶点着色,改变了模型的整体着色。 着色有两种模式: 1.glShadeModel(GL_FLAT);平面着色,使用每个三角形最后顶点的颜色,设置整个三角形的颜色。
glShadeModel(GL_SMOOTH);平滑着色,使用每个顶点的颜色,平滑设置整个三角形的颜色。 上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 const GLfloat squareColours[] = { 1.0, 0.0, 0.0, 1.0,// Red - top left - colour for squareVertices[0] 0.0, 1.0, 0.0, 1.0, // Green - bottom left - squareVertices[1] 0.0, 0.0, 1.0, 1.0, // Blue - bottom right - squareVerticies[2] 1.0, 1.0, 0.0, 1.0 // Grey - top right- squareVerticies[3] }; glShadeModel(GL_FLAT); glLoadIdentity(); glTranslatef(1.5, 0.0, -6.0); glRotatef(rate, 0.0, 0.0, 1.0); glVertexPointer(3, GL_FLOAT, 0, squareVertices); glEnableClientState(GL_VERTEX_ARRAY); glColorPointer(4, GL_FLOAT, 0, squareColours); // NEW glEnableClientState(GL_COLOR_ARRAY); // NEW glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_COLOR_ARRAY); // NEW
glColorPointer() 函数接受 4 个参数,分别代表颜色的数目,数据类型,0,和颜色数据数组。 我们要开启 OpenGL 的颜色绘制模式,绘制完成后,我们要关闭它,否则会影响到三角形颜色的绘制,值么说来,个人感觉 context 的上下文保存状态可能使用的是栈,每个操作都会压入栈中,我们开启颜色模式,就应该关闭它。
下一篇将会介绍加载一个纹理图片。