天天看點

OpenGl學習第三章

上個星期學習了下金字塔的繪制,然後這周有看了看正方體的繪制,通過依次繪制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);