
在opengl es中绘制一个三角形,设置位置为 gl.glTranslatef(-0.0f, 0.0f, 3.0f);//移出屏幕一些距离。
我们添加了一个三角形和一个四边形,在这里我们使用glDrawElements方法来绘制我们的第一个三角形和使用glDrawArrays来绘制我们的第一个四边形,来演示在OpenGL ES中怎样绘制最基本的图元。
在OpenGL ES中不支持glVertex方法,因此在绘制三角形和四边形的方法和NeHe教程中的方法有所不同。为了是程序条理清楚,我们分别实现MyTriangle和MySquare来绘制我们的一个三角形和四边形。
现在假设MyTriangl和 MySquare已经实现好,在后面详细叙述这两个类的实现。在MyGLRender的onDrawFrame中的代码如下:
[java] view plaincopyprint?- public void onDrawFrame(GL10 gl)
- {
- // 清除屏幕和深度缓存
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
- // 重置当前的模型观察矩阵
- gl.glLoadIdentity();
- // 左移 1.5 单位,纵深向里移动 6.0
- gl.glTranslatef(-1.5f,0.0f,-6.0f);
- // 画三角形
- triangle.draw(gl);
- // 右移3单位
- gl.glTranslatef(3.0f,0.0f,0.0f);
- // 画四边形
- quad.draw(gl);
- }
{
// 清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,纵深向里移动 6.0
gl.glTranslatef(-1.5f,0.0f,-6.0f);
// 画三角形
triangle.draw(gl);
// 右移3单位
gl.glTranslatef(3.0f,0.0f,0.0f);
// 画四边形
quad.draw(gl);
}
当我们调用glLoadIdentity ()之后,实际上将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。
glTranslatef(x, y, z)沿着 X, Y和 Z轴移动。根据前面的次序,下面的代码沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位。注意在glTranslatef(x, y, z)中移动的时候,它并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。
现在我们已经移到了屏幕的左半部分,并且将视图推入屏幕背后足够的距离以便我们可以看见全部的场景-创建三角形。triangle.draw(gl)来完成我们的第一个三角形绘制。
在屏幕的左半部分画完三角形后,我们要移到右半部分来画正方形。为此要再次使用glTranslate。这次右移,所以X坐标值为正值。因为前面左移了1.5个单位,这次要先向右移回屏幕中心(1.5个单位),再向右移动1.5个单位。总共要向右移3.0个单位。quad.draw(gl)来完成我们的第一四边形的绘制。
要么把摄像机往后移(同样是用glTranslate,相当于把整个世界往前移),要么投影变换把glFrustum改成glOrtho,因为glOrtho可以看见摄像机后面的东西。比如
gl.glOrtho(-ratio, ratio, -1, 1, -5, 5);