Android 3D 笔记(入门二)-小知识点回味

清楚了的

  1. GL10:意味着可以使用OpenGL ES 1.0标准中定义的所有函数。

需要再次学习的

问题一

public class TriangleRenderer implements GLSurfaceView.Renderer {
    private GLSurfaceView glSurfaceView;

    public TriangleRenderer(GLSurfaceView glSurfaceView) {
        this.glSurfaceView = glSurfaceView;
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//        this.firstTriangle(gl);
//        this.secondTriangle(gl);
        //当前存在的问题就是画出来的内容一直闪烁是什么鬼,就先这样吧,先看看纹理。
        LogUtil.i("onSurfaceCreated");
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        LogUtil.i("onSurfaceChanged");
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        this.secondTriangle(gl);
        //后来我试了一下放到这个方法里就不会闪烁啦,所以我们是没有搞清楚,复写的这三个方法的细节咯。
    }

    private void secondTriangle(GL10 gl) {
        final int vertexSize = (2 + 4) * 4;

        gl.glClearColor(0, 0, 0, 1);//设置背景的缓冲区颜色。
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//用缓冲区中的颜色来清理试图内容。

        gl.glViewport(0, 0, this.glSurfaceView.getWidth(), this.glSurfaceView.getHeight());//定义视口
        gl.glMatrixMode(GL10.GL_PROJECTION);//设置据怎类型为投影矩阵。

        gl.glLoadIdentity();//重置当前指定的矩阵为单位矩阵.
        //gl.glOrthof(0,320,1,0,480,-1);
        gl.glOrthof(0, 320, 0, 480, 1, -1);

        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * vertexSize);//三个定点,每个由xy组成,每个浮点数占4个字节(只能使用XY表示定点坐标z轴默认为0)
        byteBuffer.order(ByteOrder.nativeOrder());
        FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
        float[] array = {
                /*坐标*/10f, 30f,/*颜色*/1, 0, 0, 1,
                /*坐标*/310f, 30f,/*颜色*/0, 1, 0, 1,
                /*坐标*/150f, 450f,/*颜色*/0, 0, 1, 1
        };
        floatBuffer.put(array);
        floatBuffer.flip();

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
        floatBuffer.position(0);
        gl.glVertexPointer(2, GL10.GL_FLOAT, vertexSize, floatBuffer);
        floatBuffer.position(2);
        gl.glColorPointer(4, GL10.GL_FLOAT, vertexSize, floatBuffer);
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
      }
}
现象:

public void onSurfaceCreated(GL10 gl, EGLConfig config)调用 secondTriangle 执行的结果就会持续闪烁
public void onDrawFrame(GL10 gl)调用 secondTriangle 执行的结果就没问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值