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

原创 2016年08月10日 10:27:52

一、分类

添加颜色的种类有两种

 - 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的流程,从着色器编写到显示在屏幕上

本文讲述Android中开发OpenGL ES程序的完整流程。
  • lb377463323
  • lb377463323
  • 2017年03月19日 13:36
  • 1123

OpenGL ES颜色混合

1、新建 MyBlendRenderer.java //颜色 混合 //启用混合时,新颜色与颜色缓冲区的原有颜色进行组合,通过对这些颜色进行不同的组合,可以产生许多不同的特殊效果 //已经存在颜...
  • q344716129
  • q344716129
  • 2015年08月15日 16:05
  • 1021

[OpenGL ES 05]相对空间变换及颜色

[OpenGL ES 05]相对空间变换及颜色 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 ...
  • kesalin
  • kesalin
  • 2012年12月11日 10:53
  • 9976

Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求。...
  • junzia
  • junzia
  • 2017年08月03日 10:37
  • 2460

Android OpenGL ES(二)----平滑着色

直线或者三角形上的每个片段混合后的颜色可以用一个varying生成。我们不仅能混合颜色,还可以给varying传递任何值,OpenGL会选择属于那条直线的两个值,或者属于那个三角形的三个值,并平滑地在...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2015年06月22日 19:53
  • 2701

android opengl es基本操作,画线,三角形,正方形,颜色设置

上篇文章讲了opengl es的基本知识,GLSurfaceView的创建,画点等内容,这篇文章将opengl es另外的一些基本操作,比如画线,画三角形,正方形等,以及这些例子中涉及到了相关的知识点...
  • u012761326
  • u012761326
  • 2017年02月21日 14:32
  • 2545

glClearColor、glClear、glColor、glShadeModel、glClearDepth、glDepthFunc

简述:OpenGL 支持两种颜色模式:一种是RGBA,一种是颜色索引模式。无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接代表了颜色;而颜色索引模式中,数据代...
  • hebbely
  • hebbely
  • 2017年04月10日 17:01
  • 1642

【OpenGL】Android NDK与OpenGL显示png图片(native方式)

Android NDK与OpenGL显示png图片(native方式) 源代码链接: NDK使用: libpng-1.6.15 zlib-1.2.8 Android.mk # Copyright...
  • Taily_Duan
  • Taily_Duan
  • 2017年03月06日 11:22
  • 804

两种修改png图片颜色方法的对比

                            两种修改png图片颜色方法的对比在手机游戏开发中,为了节省资源,我们常常修改png图片以实现一张图片多种显示效果。有两种办法可以实现这个功能: ...
  • kesalin
  • kesalin
  • 2006年07月04日 13:18
  • 10179

opengl es 颜色和着色

上一节介绍了opengl es着色器原理和过程 我们对着色器原理和过程有了较为详细的理解,并且重点讲解了使用顶点着色器来实现opengl基本图元(点,直线,三角形)的位置,那么本节讲解opengl ...
  • pangrui201
  • pangrui201
  • 2017年07月17日 23:43
  • 338
收藏助手
不良信息举报
您举报文章:Android OpenGL ES学习笔记之添加颜色
举报原因:
原因补充:

(最多只允许输入30个字)