OpenGL学习(四):添加颜色

来源:互联网 发布:仿淘宝首页html 编辑:程序博客网 时间:2024/05/08 14:21

一、添加单色
步骤一、
FlatColoredSquare类继承Square类,重写Square的draw()方法
package com.example.administrator.createopenglview;

import javax.microedition.khronos.opengles.GL10;/** * Created by Administrator on 2016/9/26. * Flat coloring(单色) * 是通知OpenGL使用单一的颜色来渲染,OpenGL将一直使用指定的颜色来渲染直到你指定其它的颜色。 * 指定颜色的方法为 * public abstract void glColor4f(float red, float green, float blue, float alpha)。 * 缺省的red,green,blue为1,代表白色。这也是为什么前面显示的正方形都是白色的缘故。 */public class FlatColoredSquare extends Square {    @Override    public void draw(GL10 gl) {        /**         * RGBA模式(红,绿,蓝,透明度)         */        gl.glColor4f(1f, 0f, 0f, 1f);        super.draw(gl);    }}

步骤二、在OpenGLGLRenderer中的onSurfaceCreate()方法

/** * 初始化Square */if (square == null)    square = new FlatColoredSquare();

步骤 三、界面展示
这里写图片描述这里写图片描述

二、添加渐变色

步骤一、SmoothColoredSquare类继承Square类,重写Square的draw()方法

package com.example.administrator.createopenglview;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.FloatBuffer;import javax.microedition.khronos.opengles.GL10;/** * Created by Administrator on 2016/9/26. * <p> * Smooth coloring (平滑颜色过渡) * 当给每个顶点定义一个颜色时,OpenGL自动为不同顶点颜色之间生成中间过渡颜色(渐变色) */public class SmoothColoredSquare extends Square {    //颜色映射到顶点。    float[] colors = {            1f, 0f, 0f, 1f,//顶点 0  红            0f, 1f, 0f, 1f,//顶点 1 绿            0f, 0f, 1f, 1f,//顶点 2 蓝            1f, 0f, 1f, 1f,//顶点 3 洋红    };    //颜色缓存    private final FloatBuffer colorFloatBuffer;    public SmoothColoredSquare() {        super();        //浮动有4个字节,颜色(RGBA)* 4字节        ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);        cbb.order(ByteOrder.nativeOrder());        colorFloatBuffer = cbb.asFloatBuffer();        colorFloatBuffer.put(colors);        colorFloatBuffer.position(0);    }    /**     * 画正方形     *     * @param gl     */    @Override    public void draw(GL10 gl) {        /**         * size:指定了每个顶点对应的坐标个数,只能是2,3,4中的一个,默认值是4         *type:指定了数组中每个顶点坐标的数据类型,可取常量:GL_BYTE, GL_SHORT,GL_FIXED,GL_FLOAT;         *stride:指定了连续顶点间的字节排列方式,如果为0,         *        数组中的顶点就会被认为是按照紧凑方式排列的,默认值为0         *pointer:制订了数组中第一个顶点的首地址,默认值为0,对于我们的android,         *        大家可以不用去管什么地址的,一般给一个IntBuffer就可以了。         */        //指定数组的位置和数据格式的顶点坐标时使用渲染。        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verFloatBuffer);        /**         *  可以控制管道(pipeline)开关         *函数参数:         *array ---- 可以控制的管道(pipeline)开关可以有:GL_COLOR_ARRAY (颜色) ,         *GL_NORMAL_ARRAY (法线), GL_TEXTURE_COORD_ARRAY (材质),         *GL_VERTEX_ARRAY(顶点),GL_POINT_SIZE_ARRAY_OES等         */        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//新行补充。        //指出了颜色缓冲区的位置。        gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorFloatBuffer);//新行补充。        super.draw(gl);        //关闭通道        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);    }}

步骤二、在OpenGLGLRenderer中的onSurfaceCreate()方法

这里写图片描述

步骤 三、界面展示
这里写图片描述
这里写图片描述

0 0
原创粉丝点击