glDrawArray

今天讲一下glDrawArray这个方法

方法的解释我在前面gl10方法集中已经做了说明,可能会有些难懂的,这里来解释一下。

下面是自己写的简单代码。

test2.java

package my.test2;

 

import android.app.Activity;

import android.os.Bundle;

import android.opengl.*;

public class test2 extends Activity {

    /** Calledwhen the activity is first created. */

    GLSurfaceView myRenderer;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        myRenderer=new GLSurfaceView(this);

        myRenderer.setRenderer(new Renderer());

        setContentView(myRenderer);

    }

}

 

Renderer.java

package my.test2;

import java.nio.ByteBuffer;

import java.nio.ByteOrder;

import java.nio.FloatBuffer;

import java.nio.ShortBuffer;

 

import javax.microedition.khronos.egl.EGLConfig;

import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView;

 

public class Renderer implementsGLSurfaceView.Renderer{

    ////////////定义要使用的颜色/////////////

    ////////////定义缓冲区////////////////////

    private FloatBuffer vertexBuffer;

    ////////////定义角度/////////////////////

    ////////////定义矩阵////////////////////

    private float[] vertexArray={

           -0.5f,0.5f,0,

           0.5f,0.5f,0,

           0.5f,-0.5f,0,

           -0.5f,-0.5f,0

    };

    @Override

    public void onDrawFrame(GL10 gl) {

       // TODO Auto-generated method stub

       gl.glClearColor(0f,0f,0f,1.0f);

       gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

       gl.glColor4f(0.5f,0.5f, 0.5f, 0.5f);

       gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

      

       gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);

       //gl.glDrawElements(GL10.GL_TRIANGLES,3, GL10.GL_UNSIGNED_SHORT, indexBuffer);

    }

 

    @Override

    public void onSurfaceChanged(GL10 gl, int width, int height) {

       // TODO Auto-generated method stub

       gl.glViewport(0, 0, width, height);

    }

 

    @Override

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {

       // TODO Auto-generated method stub

       gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

       init();

    }

    private void init(){

       ByteBuffer vbb=ByteBuffer.allocateDirect(4*3*4);

       vbb.order(ByteOrder.nativeOrder());

       vertexBuffer=vbb.asFloatBuffer();

       vertexBuffer.put(vertexArray);

       vertexBuffer.position(0);

    }

 

}

效果图:

glDrawArray它有多种绘图模式

GL_POINTS
GL_LINES
GL_LINE_LOOP
GL_LINE_STRIP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN

下面主要讲解一下后3个模式

这三个模式都是连续绘制三角形的,三角形的个数由模式类型,以及顶点矩阵中的顶点个数决定的。

 

GL_TRIANGLES

这个参数意味着OpenGL使用三个顶点来组成图形。所以,在开始的三个顶点,将用顶点1,顶点2,顶点3来组成一个三角形。完成后,在用下一组的三个顶点(顶点4,5,6)来组成三角形,直到数组结束。

 

GL_TRIANGLE_STRIP 

OpenGL的使用将最开始的两个顶点出发,然后遍历每个顶点,这些顶点将使用前2个顶点一起组成一个三角形。

 

GL_TRIANGLE_FAN

在跳过开始的2个顶点,然后遍历每个顶点,让OpenGL将这些顶点于它们前一个,以及数组的第一个顶点一起组成一个三角形。

 

在前面的代码中,我们用的模式是GL_TRIANGLE_FAN,看下图

效果图:


使用GL_TRIANGLE_FAN,绘出三角形的顺序是三角形ABC,然后是三角形ACD。

若使用GL_TRIANGLE_STRIP,则效果图为:


绘出三角形的顺序是三角形ABC,然后是三角形BCD。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值