当前位置:操作系统 > 安卓/Android >>

Android OpenGL ES 颜色

一、基础知识:
1.平滑着色(Smooth coloring):
  将多个顶点的不同颜色混合在一起,创建出漂亮的色彩混合。
 
2.单调着色:
  给图形涂上一种固定单一的颜色。
 
3.三角形定义的颜色数组(平滑着色):
[java]  
int one = 0x10000;  
//三角形的顶点颜色值(r,g,b,a)  
private IntBuffer colorBuffer = IntBuffer.wrap(new int[]{  
    one,0,0,one,  
    0,one,0,one,  
    0,0,one,one,  
});  
 
[java 
// 开启颜色渲染功能.  
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);  
  
// 设置三角形顶点的颜色  
gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);  
  
//关闭颜色渲染功能.  
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);  
 
4.正方形定义的颜色数组(单调着色):
[java] view plaincopy
/* 渲染正方形 */  
// 设置当前色为蓝色  
gl.glColor4f(1.0f, 0.5f, 1.0f, 1.0f);  
 
 
 
二、代码编辑:
【Activity01.java】
[java] mples_12_02;  
  
import android.app.Activity;  
import android.opengl.GLSu易做图ceView;  
import android.opengl.GLSu易做图ceView.Renderer;  
import android.os.Bundle;  
  
public class Activity01 extends Activity  
{  
    Renderer render = new GLRender();  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
  
        GLSu易做图ceView glView = new GLSu易做图ceView(this);  
          
        glView.setRenderer(render);  
        setContentView(glView);  
    }  
}  
 
【GLRender.java】
[java] 
package com.yarin.android.Examples_12_02;  
  
import java.nio.IntBuffer;  
  
import javax.microedition.khronos.egl.EGLConfig;  
import javax.microedition.khronos.opengles.GL10;  
  
import android.opengl.GLSu易做图ceView.Renderer;  
  
public class GLRender implements Renderer  
{  
     int one = 0x10000;  
          
     //三角形三个顶点  
     private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{  
            0,one,0,        //上顶点  
            -one,-one,0,    //坐下点  
            one,-one,0,});  //右下点  
     //正方形的4个顶点  
     private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{  
                one,one,0,  
                -one,one,0,  
                one,-one,0,  
                -one,-one,0});  
       
     //三角形的顶点颜色值(r,g,b,a)  
     private IntBuffer colorBuffer = IntBuffer.wrap(new int[]{  
             one,0,0,one,  
             0,one,0,one,  
             0,0,one,one,  
     });  
    @Override  
    public void onDrawFrame(GL10 gl)  
    {  
        // 清除屏幕和深度缓存  
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  
        // 重置当前的模型观察矩阵  
        gl.glLoadIdentity();  
          
        // 左移 1.5 单位,并移入屏幕 6.0  
        gl.glTranslatef(-1.5f, 0.0f, -6.0f);  
          
        //设置定点数组  
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);  
        //设置颜色数组 -- 开启颜色渲染功能.  
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);  
        // 设置三角形顶点的颜色  
        gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);  
        // 设置三角形顶点  
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);  
        //绘制三角形  
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);  
        //关闭颜色数组 -- 关闭颜色渲染功能.  
        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);  
          
        /* 渲染正方形 */  
        // 设置当前色为蓝色  
        gl.glColor4f(1.0f, 0.5f, 1.0f, 1.0f);  
          
        // 重置当前的模型观察矩阵  
        gl.glLoadIdentity();  
          
        // 左移 1.5 单位,并移入屏幕 6.0  
        gl.glTranslatef(1.5f, 0.0f, -6.0f);  
        //设置和绘制正方形  
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);  
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);  
  
        //取消顶点数组  
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);  
          
    }  
  
    @Override  
    public void onSu易做图ceChanged(GL10 gl, int width, int height)  
    {  
        // TODO Auto-generated method stub  
        float ratio = (float) width / height;  
        //设置OpenGL场景的大小  
        gl.glViewport(0, 0, width, height);  
  &
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,