Dennis-Android的博客

努力工作,快乐生活!

Android OpenGL ES学习笔记之添加颜色

一、分类

添加颜色的种类有两种

 - Flat coloring             单色

 - Smooth coloring           平滑着色

单色

顾命思义就是一种单一的颜色,调用 glColor4f(float red, float green, float blue, float alpha)方法传入红、绿、蓝、透明度四个参数,取值0~1f。

还是以Android OpenGL ES学习笔记之绘制点代码为基础

public class MyRenderer implements GLSurfaceView.Renderer {
        //顶点数组
        private float[] mArray = {

                  -0.6f , 0.6f , 0f,

                  -0.2f , 0f , 0f ,

                   0.2f , 0.6f , 0f ,
        };

        // 缓冲区
        private FloatBuffer mBuffer;

        public MyRenderer() {
            //获取浮点形缓冲数据
            mBuffer = Utils.getFloatBuffer(mArray);
        }

        // Surface创建的时候调用
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            // 设置清屏颜色为黑色
            gl.glClearColor(0f, 0f, 0f, 0f);

            }

        // Surface改变的的时候调用
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            // 设置窗口大小
            gl.glViewport(0, 0, width  , height);
        }

        // 在Surface上绘制的时候调用
        @Override
        public void onDrawFrame(GL10 gl) {

            // 清除屏幕         gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);

            // 允许设置顶点 // GL10.GL_VERTEX_ARRAY顶点数组
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

            // 设置顶点
            gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mBuffer);

            //设置点的颜色为绿色
            gl.glColor4f(0f, 1f, 0f, 0f);

            //设置点的大小
            gl.glPointSize(40f);

            // 绘制点
            gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 3);

            // 取消顶点设置
            gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

        }
    }

其中设置颜色代码

        //设置点的颜色为绿色
        gl.glColor4f(0f, 1f, 0f, 0f);

效果如下图,单一的绿色

这里写图片描述


平滑着色

就是给每个顶点定义一个颜色,然后顶点之间的面会显示渐变色

调用glColorPointer(int size, int type, int stride, Buffer pointer)传入四个参数

 - size ———— 指明每个颜色的元素数量,必须为4

 - type————— 指明每个矩阵中颜色元素的数据类型

 - stride————指明连续的点之间的位偏移,如果stride 为0 时,颜色被紧密挤入矩阵,初始值为0

 - pointer———指明包含颜色的缓冲区

定义一个顶点颜色色组

        //顶点颜色数组
        private float[] mcolorArray = {

                      1f, 0f , 0f,0f,

                      0f , 1f , 0f ,0f,

                      0f , 0f , 1f ,0f
                };

转化成缓冲数据

            //获取浮点型颜色数据
            colorBuffer= Utils.getFloatBuffer(mcolorArray);

在原来的代码中加上

            // 开启颜色渲染功能.  
            gl.glEnableClientState(GL10.GL_COLOR_ARRAY);  

            // 设置三角形顶点的颜色  
            gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);  

            //关闭颜色渲染功能.  
            gl.glDisableClientState(GL10.GL_COLOR_ARRAY);  

运行,效果如下图

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,转载请注明出处:邓志勇博客 http://blog.csdn.net/qq_31530015/ https://blog.csdn.net/qq_31530015/article/details/52122353
文章标签: android opengl es opengl
个人分类: Android OpenGL ES
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭