android opengl 原理及开发(2)绘制基本图形

原创 2012年03月29日 17:26:35


工程名称为vertex,标识点的意思,点是3d图形空间最基本元素,三角形的绘制通过指定三个点,线由两个点连接构成,对边型至少由三个vertex构成,

Activity 名为VertexActivity


package com.android.vertex;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;

import java.io.File;


public class VertexActivity extends Activity {

    VertexView mView;

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mView = new VertexView(getApplication());
		setContentView(mView);
    }

    @Override protected void onPause() {
        super.onPause();
        mView.onPause();
    }

    @Override protected void onResume() {
        super.onResume();
        mView.onResume();
    }
}

VertexActivity 创建时会加载
VertexView ,这里要注意activity状态改变时一定要让view状态同步,因为这会影响opengl绘制线程的状态,比如activity pause状态时,GLSurfaceView的绘制线程也回同步

到pause状态。


VertexView 继承GLSurfaceView ,MyRenderer实现GLSurface.renderer接口,负责具体绘制


VertexView.java 代码:


package com.android.vertex;


import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;


import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;


import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.opengles.GL10;


import android.opengl.GLES10;


/**
 * An implementation of SurfaceView that uses the dedicated surface for
 * displaying an OpenGL animation.  This allows the animation to run in a
 * separate thread, without requiring that it be driven by the update mechanism
 * of the view hierarchy.
 *
 * The application-specific rendering code is delegated to a GLView.Renderer
 * instance.
 */
class VertexView extends GLSurfaceView {
    private static String TAG = "vertex";
	private MyRenderer mRenderer;
	


    public VertexView(Context context) {
        super(context);
	//set this if you use opengl es version 2.0
        //setEGLContextClientVersion(2);
        mRenderer = new MyRenderer();
        setRenderer(mRenderer);
    }


    private static class MyRenderer implements GLSurfaceView.Renderer {

		private float red = 0.9f;
		private float green = 0.2f;
		private float blue = 0.2f;
		
        public MyRenderer() {
            
        }


        public void onDrawFrame(GL10 gl) {
        	gl.glClearColor(red, green, blue, 1.0f);
        }


        public void onSurfaceChanged(GL10 gl, int width, int height) {
           gl.glViewport(0,0,width,height);
		   gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        }


        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
           
        }

    }

}


实际绘制动作 在MyRederer实现的三个接口函数里,

如果我们想通过按键事件与绘制线程交互可以用上一篇文章提到的queueEvent方法操作绘制线程对象mRederer,

在VertexView类中添加按键事件处理

//comunicate with render thread 
	public boolean onTouchEvent(final MotionEvent event) {
		queueEvent(new Runnable() {
			public void run() {
				mRenderer.setColor(event.getX() / getWidth(), event.getY() / getHeight(), 1.0f);
			}
		} );


		return true;
	}

MyRenderer类中添加setColor,改变颜色。

public void setColor(float r, float g, float b) {
			red = r;
			green = g;
			blue = b;
		}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

OpenGL学习(2)基本图形绘制

OpenGL学习(2)基本图形绘制

cocos2D-X源码分析之从cocos2D-X学习OpenGL(5)---绘制基本图形

最近完整的学习了learnopengl(http://www.learnopengl.com/),觉得非常有启发,从而又想起了这个长草许久的专题,正好趁这段时间,从本篇起完成这个专题,需要说明的是,从...

Android的基本2D图形绘制

  • 2013年05月22日 23:14
  • 312KB
  • 下载

OpenGL超级宝典总结(一)3D图形原理和一些基本概念

这是我学习《OpenGL超级宝典
  • cbbbc
  • cbbbc
  • 2014年08月17日 16:11
  • 1605

OpenGL ES开发绘制2D图形

package com.example.tyxiong.myapplication;import android.app.Activity; import android.opengl.GLSurfa...

Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html如果你还不清楚如何定义图形及坐标系统,请移步:Android官方开...

Android OpenGL 显示基本图形及相关概念解读

在上一篇文章中,我们知道了如何在Android开发一个OpenGL模型显示。但是并没有对具体模型数据进行显示,只是展示一个背景颜色而已,在本章中,我们学习如何将一个模型数据显示成一个具体的3D图形。在...

opengl基本图形绘制

  • 2015年06月30日 00:11
  • 525KB
  • 下载

OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形。

一、清除缓冲区 缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色、深度、累积和模板等四种常用的缓冲区。这里只介绍颜色缓冲区和深度缓冲区的清除方法。 由于缓冲区中可能保留有上一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android opengl 原理及开发(2)绘制基本图形
举报原因:
原因补充:

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