天天看点

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);