public void drawSelfLeft(String score, int texId) // 传入数字和纹理坐标 左对齐 { scoreStr = score; MatrixState.pushMatrix(); for (int i = 0; i < scoreStr.length(); i++) // 将得分中的每个数字字符绘制 { char c = scoreStr.charAt(i); MatrixState.translate(width, 0, 0); number[c - '0'].drawSelf(texId); } MatrixState.popMatrix(); }
// 总的绘制方法drawSelf public void drawSelf(int texId) { // 绘制交通柱的圆柱部分 cone_in.drawSelf(texId); // 绘制交通柱下方底座的上面 MatrixState.pushMatrix(); MatrixState.translate(0, -UNIT_SIZE, 0); pedestal.drawSelf(texId); MatrixState.popMatrix(); // 绘制交通柱下方底座的侧面 MatrixState.pushMatrix(); MatrixState.translate(0, -UNIT_SIZE - HEIGHT, 0); cylinder.drawSelf(texId); MatrixState.popMatrix(); // 绘制交通柱下方底座的下面 MatrixState.pushMatrix(); MatrixState.translate(0, -UNIT_SIZE - HEIGHT * 2, 0); MatrixState.rotate(180, 1, 0, 0); pedestal.drawSelf(texId); MatrixState.popMatrix(); }
// 自定义的绘制方法 public void drawSelf(int texId) { // 使用某套指定的Shader程序 GLES20.glUseProgram(mProgram); // 将最终变换矩阵传入到Shader程序中 GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, MatrixState.getFinalMatrix(), 0); // 传入坐标数据 GLES20.glVertexAttribPointer( maPositionHandle, 3, GLES20.GL_FLOAT, false, 3 * 4, mVertexBuffer); // 传入纹理坐标数据 GLES20.glVertexAttribPointer( maTexCoorHandle, 2, GLES20.GL_FLOAT, false, 2 * 4, mTexCoorBuffer); // 允许顶点位置数据数组 GLES20.glEnableVertexAttribArray(maPositionHandle); GLES20.glEnableVertexAttribArray(maTexCoorHandle); // 绑定纹理 GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texId); // 绘制纹理矩形 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vCount); }