OpenGL学习(四):添加颜色

一、添加单色
步骤一、
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();

步骤 三、界面展示
OpenGL学习(四):添加颜色_第1张图片OpenGL学习(四):添加颜色_第2张图片

二、添加渐变色

步骤一、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.
 * 

* 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()方法

OpenGL学习(四):添加颜色_第3张图片

步骤 三、界面展示
OpenGL学习(四):添加颜色_第4张图片
OpenGL学习(四):添加颜色_第5张图片

你可能感兴趣的:(android,OpenGL学习)