Android_GLSurfaceView
使用open GL ES 绘制三角形
首先自定义一个GLSurfaceView
class MyGLSurceView extends GLSurfaceView {
public MyGLSurceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGLSurceView(Context context) {
super(context);
}
}
再定义一个给GLSurfaceView进行渲染的渲染器Renderer,他是GLSurfaceView的内部接口类。
class MyRenderer implements GLSurfaceView.Renderer {
@Override
public void onDrawFrame(GL10 gl) {
//清除缓存颜色区域
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
//设置模型视图
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();//加载单位矩阵
//眼睛放置的位置
//GL10 gl, float eyeX, float eyeY, float eyeZ, 眼睛放置的位置
//float centerX, float centerY, float centerZ, 相机放置的位置
//float upX, float upY, float upZ 相机的朝向
GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);
//定义三角形的点x,y,z
float[] coords = {
0f,0.5f,0f,
-0.5f,-0.5f,0f,
0.5f,-0.5f,0f
};
//存到内存缓存区
ByteBuffer buffer = ByteBuffer.allocateDirect(coords.length *4);
buffer.order(ByteOrder.nativeOrder());
//放置顶点坐标
FloatBuffer floatBuf = buffer.asFloatBuffer();
floatBuf.put(coords);//将点存放到floatBuffer里面
buffer.position(0);//指针指向0
//制定绘制点的颜色
gl.glColor4f(1f, 0f, 0f, 1f);
//开始绘制点
//3 三维点, type数据类型,0跨度,顶点缓冲区
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, buffer);
//设置绘制三角形
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
//设置视口区域
gl.glViewport(0, 0, width, height);
//设置绘制模式
gl.glMatrixMode(GL10.GL_PROJECTION);
//设置为单例矩阵
gl.glLoadIdentity();
float ration = (float)width/(float)height;
//设置平截头体 左,右,下,上,近平面,远平面
gl.glFrustumf(-1f, 1f, -ration, ration, 3, 7);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
//设置清屏颜色
gl.glClearColor(1, 1, 1, 1);
//启动绘制顶点数组
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyGLSurceView glSurceView = new MyGLSurceView(this);
glSurceView.setRenderer(new MyRenderer());
setContentView(glSurceView);
}
}
运行效果图如下:

Android_GLSurfaceView的更多相关文章
随机推荐
- salt-api配置安装 以及使用
salt-api salt-api是我们通过restful-api调用salt-master的接口,且调用的时候必须通过认证才能调用,认证的用户为系统用户,下面就说说如何配置salt-api. 安装S ...
- kalman滤波(三)---各种滤波的方法汇总+优化的方法
大神解答 一.前提 最一般的状态估计问题,我们会根据系统是否线性,把它们分为线性/非线性系统.同时,对于噪声,根据它们是否为高斯分布,分为高斯/非高斯噪声系统.现实中最常见的,也是最困难的问题,是非线 ...
- Python开发——数据类型【数字】
布尔型 bool型只有两个值:True 或 False 我们将bool值归类为数字,习惯上:1表示true,0表示false 整型 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2* ...
- 数字提取——C语言
Problem Description AekdyCoin is the most powerful boy in the group ACM_DIY, whose signature is valu ...
- spring boot + spring batch 读数据库文件写入文本文件&读文本文件写入数据库
好久没有写博客,换了一家新公司,原来的公司用的是spring,现在这家公司用的是spring boot.然后,项目组布置了一个任务,关于两个数据库之间的表同步,我首先想到的就是spring batch ...
- BZOJ1880或洛谷2149 [SDOI2009]Elaxia的路线
BZOJ原题链接 洛谷原题链接 显然最长公共路径是最短路上的一条链. 我们可以把最短路经过的边看成有向边,那么组成的图就是一张\(DAG\),这样题目要求的即是两张\(DAG\)重合部分中的最长链. ...
- python requests 模块
requests 是第三方 python 库,用于处理 url 资源 requests 项目官网:http://www.python-requests.org/en/master/ 安装方式:pip ...
- 团队-爬取豆瓣电影TOP250-开发环境搭建过程
从官网下载安装包(http://www.python.org). 安装Python 选择安装路径(我选的默认) 安装Pycharm 1.从官网下载安装包(https://www.jetbrains.c ...
- C++标准库第二版笔记 2
C++标准库第二版笔记 2 微小但重要的语法提升 template表达式内的空格: vector< list<int> >; // OK in each C++ version ...
- springboot 使用maven 打包 报 (请使用 -source 7 或更高版本以启用 diamond 运算符) 错误解决办法
在使用springboot maven 打包时 报如下错误 (请使用 -source 7 或更高版本以启用 diamond 运算符) pom.xml编译插件 配置如下: <plugin> ...