使用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的更多相关文章

随机推荐

  1. 动态添加 SqlParameter 参数

    List<SqlParameter> paras = new List<SqlParameter>(); paras.Add(new SqlParameter("@m ...

  2. MySQL数据查询之单表查询

    单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...

  3. tcp、ip、http

    tcp是传输层协议,ip是网络层协议,http是应用层协议,简单说就是tcp是传输数据,而http是封装数据. rpc与http的区别是项目大的话,接口间调用变多的话,采用rpc的话,不用像http那 ...

  4. java多线程系列8 高级同步工具(2)CountDownLatch

    CountDownLatch,计数器的初始值为线程的数量.每当一个线程完成了自己的任务后, 计数器的值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务, 然后在闭锁上等待的线程就可以恢复执 ...

  5. getObjectURL 上传图片预览

    js 函数 function getObjectURL(file) {    var url = null ;     if (window.createObjectURL!=undefined) { ...

  6. docker 技术

    利用docker打包一个sshd的服务 准备环境 安装docker     修改主机名与hosts解析     echo '10.0.0.11 docker01'     参考文档:https://m ...

  7. sock5客户端解密数据流

    一.安装 略 二.配置 vi /etc/shadowsocks.json { "server":"x.x.x.x", , , "password&qu ...

  8. ActiveMQ_4SpringBoot整合

    SpringBoot实现 引入jar包 <dependency>        <groupId>org.springframework.boot</groupId> ...

  9. 2019.02.14 codechef Chef at the Food Fair(线段树+泰勒展开)

    传送门 题意:现在有nnn个位置,每个位置上有一个值aia_iai​. 要求支持如下两种操作: 区间乘vvv 求区间的(1−ai)(1-a_i)(1−ai​)之积 思路: 考虑转换式子: Ans=∏i ...

  10. IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA sort排序方法使用方式, 添加关联表的 order by

    1.sort可以直接添加在命名格式的字段中 List<BomMain> findAllByDeleted(Integer deleted, Sort sort); 2.可以作为pageab ...