上個星期學習了下金字塔的繪制,然後這周有看了看正方體的繪制,通過依次繪制6個面來繪制正方體,整體代碼跟上次的金三角沒有差別,隻是坐标點,顔色,已經繪制的代碼有點差別,上代碼看看
//這是坐标
private static float[][] cubevertexcoords = new float[][] {
new float[] { // top
1, 1,-1,
-1, 1,-1,
-1, 1, 1,
1, 1, 1
},
new float[] { // bottom
1,-1, 1,
-1,-1, 1,
-1,-1,-1,
1,-1,-1
new float[] { // front
1, 1, 1,
1,-1, 1
new float[] { // back
1,-1,-1,
1, 1,-1
new float[] { // left
-1,-1, 1
new float[] { // right
};
//這是顔色
private static float[] cubecolors = new float[] {
0,1,0,1,
1,0.5f,0,1,
1,0,0,1,
1,1,0,1,
0,0,1,1,
1,0,1,1
然後必須要把呀轉化為floatbuffer ,這樣就可以使用了
private static floatbuffer[] cubevertexbfr;
private static floatbuffer cubecolorbfr;
轉化我寫了個轉化的工具類
public class bufferutil {
private static floatbuffer floatbuffer;
public static floatbuffer floattobuffer(float[] f){
bytebuffer buffer =bytebuffer.allocatedirect(f.length*4);
buffer.order(byteorder.nativeorder());
floatbuffer =buffer.asfloatbuffer();
floatbuffer.put(f);
floatbuffer.position(0);
return floatbuffer;
}
下邊是繪制的代碼
gl.glenableclientstate(gl10.gl_vertex_array);//在上邊打開在下邊就要關閉,這個原因是然後邊的繪制不會複用前邊的顔色等的樣式
gl.glenableclientstate(gl10.gl_color_array);
for (int i = 0; i < 6; i++) // draw each face
{
gl.glvertexpointer(3, gl10.gl_float, 0, cubevertexbfr[i]);
gl.glcolorpointer(4, gl10.gl_float, 0, cubecolorbfr);
gl.gldrawarrays(gl10.gl_triangle_fan, 0, 4);
gl.gldisableclientstate(gl10.gl_vertex_array);
gl.gldisableclientstate(gl10.gl_color_array);