android游戏开发(OpenGL ES绘制矩形平面)

2023-10-30

接触android将近一年了,以前学的应用开发,现在自学android游戏开发,把自己学到的分享出来一下,(这也是我的第一篇博客),不说废话了,开始正文:

GLRender类用于图形的渲染工作,Util类用于glrender中的数据缓冲。

GLRender类:

package com.example.xu.vertexdraw;

public class GLRender implements GLSurfaceView.Renderer {
    public float xrot;
    public float yrot;
    public float zrot;
    //定义顶点缓冲
    private FloatBuffer _vertexsBuffer;
    //定义顶点缓冲
    private FloatBuffer _vertexsBUffer;
    //定义索引缓冲
    private ByteBuffer _indicesBuffer;
    public void onSurfaceCreated(GL10 gl,EGLConfig config){

        //启用阴影平滑
        gl.glShadeModel(GL10.GL_SMOOTH);
        //黑色背景
        gl.glClearColor(0,0,0,0);
        //设置深度缓存
        gl.glClearDepthf(1.0f);
        //启用深度测试
        gl.glEnable(GL10.GL_DEPTH_TEST);
        //所做深度测试的内容
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);
        //创建顶点数据
        float vertexs[] = new float[12];

        vertexs[0] = 1.0f;
        vertexs[1] = 1.0f;
        vertexs[2] = 0.0f;

        vertexs[3] = -1.0f;
        vertexs[4] = 1.0f;
        vertexs[5] = 0.0f;

        vertexs[6] = -1.0f;
        vertexs[7] = -1.0f;
        vertexs[8] = 0.0f;

        vertexs[9] = 1.0f;
        vertexs[10] = -1.0f;
        vertexs[11] = 0.0f;
        //创建索引数据
        byte indices[] = new byte[6];

        indices[0] = 0;
        indices[1] = 1;
        indices[2] = 2;
        indices[3] = 0;
        indices[4] = 2;
        indices[5] = 3;

        //创建顶点缓冲
        this._vertexsBuffer = Util.getFloatBuffer(vertexs);
        //创建索引缓冲
        this._indicesBuffer = Util.getByteBUffer(indices);

    }
    public void onDrawFrame(GL10 gl){
        //清除屏幕和深度缓存
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        //重置当前的模型观察矩阵
        gl.glLoadIdentity();
        //重置当前的模型观察矩阵
        gl.glLoadIdentity();
       //移入屏幕的一段距离
        gl.glTranslatef(0.0f,0.0f,-3.0f);

        //设置三个方向的旋转
        gl.glRotatef(xrot,1.0f,0.0f,0.0f);
        gl.glRotatef(yrot,0.0f,1.0f,0.0f);
        gl.glRotatef(zrot,0.0f,0.0f,1.0f);
        //允许设置顶点
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

        gl.glVertexPointer(3,GL10.GL_FLOAT,0,this._vertexsBuffer);
        //索引绘制法
        gl.glDrawElements(GL10.GL_TRIANGLES,6,GL10.GL_UNSIGNED_BYTE,this._indicesBuffer);

        //取消顶点设置
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        //结束绘制
        gl.glFinish();
    }
    public void onSurfaceChanged(GL10 gl,int width,int heigth){
        float ratio = (float) width / heigth;
        //设置opengl场景的大小
        gl.glViewport(0,0,width,heigth);
        //设置投影矩阵
        gl.glMatrixMode(GL10.GL_PROJECTION);
        //重置投影矩阵
        gl.glLoadIdentity();
        //设置视口大小
        gl.glFrustumf(-ratio,ratio,-1,1,1,10);
        //选择模型观察矩阵
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        //重置模型观察矩阵
        gl.glLoadIdentity();
    }
}

Util类:


public class Util {
    public static FloatBuffer getFloatBuffer(float[] vertexs) {
        FloatBuffer buffer;
        ByteBuffer qbb = ByteBuffer.allocateDirect(vertexs.length * 18);
        qbb.order(ByteOrder.nativeOrder());
        buffer = qbb.asFloatBuffer();
        buffer.put(vertexs);
        buffer.position(0);
        return buffer;
    }

    public static ByteBuffer getByteBUffer(byte[] indices) {
        ByteBuffer buffer = null;
        buffer = ByteBuffer.allocateDirect(indices.length);
        buffer.put(indices);
        buffer.position(0);
        return buffer;
    }
}

还需新建MySurfaceView类用于获取用户输入,实现人机交互。

(求大神勿喷,第一次写)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android游戏开发(OpenGL ES绘制矩形平面) 的相关文章

  • opengl es 3D要素——贴图

    前不久开始了正式的opengl es学习 目前为止 成就有 显示一些三维元素 一些可以自由旋转 一些可以用手指控制左右上下的旋转 下一步准备开始写光照了 在此之前先整理下思路 我的工程已经开始变得庞大了 需要声明下 我不太会把全部的代码贴出
  • OpenGL Shading language学习总结

    这篇文章是根据
  • OpenGL ES EGL介绍

    前面已经在android平台上使用OpenGL ES的API了解了如何创建3D图形已经使用FBO渲染到纹理进行一些其他的操作 起初我学习OpenGL ES的目的就是为了研究Android平台上录制屏幕的方案 到目前为止 基础知识已经具备了
  • android游戏开发(OpenGL ES绘制矩形平面)

    接触android将近一年了 以前学的应用开发 现在自学android游戏开发 把自己学到的分享出来一下 这也是我的第一篇博客 不说废话了 开始正文 GLRender类用于图形的渲染工作 Util类用于glrender中的数据缓冲 GLRe
  • Mali GPU OpenGL ES 应用性能优化--基本概念

    1 基本概念 1 1 Mali GPU家族 Mali GPU家族都包含以下通用的硬件 基于分块的延迟渲染 Mali GPU把framebuffer分成许多块 16 x 16像素 然后一块一块地进行渲染 基于分块的渲染是有效的 因为像素值使用
  • Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)

    在上篇文章中 我们介绍了VBO索引的使用 使用VBO索引可以有效地减少顶点个数 优化内存 提高程序效率 本教程将带领大家一起走进3D 绘制一个立方体 其实画立方体本质上和画三角形没什么区别 所有的模型最终都要转换为三角形 同时 本文还会介绍
  • Cocos2dx-OpenGL ES2.0教程:初识MVP(3)

    在上一篇文章中 我在介绍vertex shader的时候挖了一个坑 CC MVPMatrix 它其实是一个uniform 每一个cocos2d x预定义的shader都包含有这个uniform 但是如果你在shader里面不使用这个变量的话
  • Android OpenGL ES2.0(一):详细讲解如何绘制一个三角形

    一 Android OpenGL ES2 0简介 1 什么是OpenGL OpenGL 全写Open Graphics Library 是指定义了一个跨编程语言 跨平台的编程接口规格的专业的图形程序接口 它用于三维图像 二维的亦可 是一个功
  • OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out

    有几个学习图形学不久的同学都问到这个问题 做一阐述 1 关键字的小修改大概由如下两点决定 第一 先考虑一个成本原则 一个关键字的定义是否修改 是由熟练程序员在使用该关键字时的思维成本来决定的 当然 还有一个原则 是由初学者的学习成本来决定的
  • IOS Opengl ES 用多光源实现材质,阴影,高光效果

    在Opengl ES 1 0 中 要实现材质效果 往往需要光源的设置 如果环境光和漫反射光强了 材质效果难以体现 如果环境光和漫反射光弱了 材质就暗了 实现阴影效果 可以放置一个主平行光源 为了材质效果 需要将环境光设到比较弱 漫反射光设到
  • Mali GPU OpenGL ES 应用性能优化--测试+定位+优化流程

    1 使用DS 5 Streamline定位瓶颈 DS 5 Streamline要求GPU驱动启用性能测试 在Mali GPU驱动中激活性能测试对性能影响微不足道 1 1 DS 5 Streamline简介 可使用DS 5 Streamlin
  • OpenGL ES之十一——绘制3D图形

    概述 这是一个系列的Android平台下OpenGl ES介绍 从最基本的使用最终到VR图的展示的实现 属于基础篇 后面针对VR视频会再有几篇文章 属于进阶篇 OpenGL ES之一 概念扫盲 OpenGL ES之二 Android中的Op
  • GLSL(着色器语言)

    GLSL 着色器语言 简介 OpenGLES的着色器语言GLSL是一种高级的图形化编程语言 其源自应用广泛的C语言 与传统的c语言不同的是 它提供了更加丰富的针对于图像处理的原生类型 诸如向量 矩阵之类 OpenGLES 主要包含以下特性
  • Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

    在Android OpenGLES2 0 十四 Obj格式3D模型加载中实现了Obj格式的3D模型的加载 加载的是一个没有贴图 没有光照处理的帽子 为了呈现出立体效果 手动 加了光照 拥有贴图的纹理及光照又该怎么加载呢 模型文件 本篇博客例
  • android游戏开发基础

    学习android已经差不多接近一年了 以前一直做的android应用 现在准备搞android游戏开发 觉得以前都没能把做应用的经验总结下来 现在决定要把游戏这块的记录下来 声明我也是初学者 首先得有一定的数学与物理基础 其次得具有一定的
  • android native 使用opengl es画点线面图形(纯c++)

    一 首先需要对EGL进行初始化 void Renderer initEGL const EGLint attribs EGL SURFACE TYPE EGL WINDOW BIT EGL BLUE SIZE 8 EGL GREEN SIZ
  • 【OPENGLES】opengles-jni实例1

    首先 说明下为什么要用jni实现opengl es 在进行移动端图像算法开发的过程中 需要完成对大量的数据进行处理 opengl是在进行图形渲染或者大批量图像运算处理时有着很大的优势 如果能够在算法库开发中加入opengl 则对于提升算法运
  • Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)

    在上篇文章中 我给大家介绍了如何在cocos2d x里面绘制一个三角形 当时我们使用的是cocos2d x引擎自带的shader和一些辅助函数 在本文中 我将演示一下如何编写自己的shader 同时 我们还会介绍VBO 顶点缓冲区对象 和V
  • 在Android下初始化Native OpenGL ES

    在上一篇文章中 介绍了在Android Native层初始化EGL及OpenGL ES的方法 其中 大量代码花费在EGL的初始化上面 非常的麻烦 在本文中 将展示利用GLSurfaceView来代替我们手动初始化EGL的过程 用GLSurf
  • OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug

    安装win32平台的OpenGL ES 3 0模拟器 一 安装3 0模拟器 一般用32位的 https developer arm com products software development tools graphics devel

随机推荐

  • 计算机基础:原码补码反码计算

    结论 1 正数的原码 反码 补码 2 负数的反码 在其原码的基础上 符号位不变 其余各个位取反 负数的补码 在反码的基础上 1 负数的补码 在原码的基础上 符号位不变 其余各位取反 最后末位 13 0 在计算机种分 0与 0 它们的原码 补
  • electron-updater更新遇到的问题 The URL protocol of the current origin (‘app://.‘) is not supported

    目前的Vue脚手架 我使用的是vue cli4 默认会携带一个 registerServiceWorker的东西 这个东西是做什么的呢 首先说明 registerServiceWorker可以运用于主流框架 它只是为了简化缓存机制产生的js
  • 大学生团体天梯赛(第十届)

    题目地址 天梯赛 include
  • pppd详解_pppd拨号脚本说明文档

    加入调试信息 nodetach ipcp accept local ipcp accept remote usepeerdns 使用服务器端协商的 DNS defaultroute 使用默认线路 user card 电信 card 移动 c
  • 【ShaderToy】基础篇之谈谈点、线的绘制

    写在前面 写前面一篇的时候 发现还是不够基础 因此打算增加几篇基础篇 从点线面开始 希望可以更好理解 其实用Pixel Shader的过程很像在纸上绘画的过程 屏幕上的每一个像素对应了纸上的一个方格 如果你愿意 你甚至可以一个个判断像素的位
  • JS实现数组随机读取思路,js数组随机思路分析

    需要了解的 Math 对象方法 方法 描述 ceil x 对数进行上舍入 即向上取整 floor x 对 x 进行下舍入 即向下取整 round x 四舍五入 random 返回 0 1 之间的随机数 包含 0 不包含 1 一些实例说明 M
  • matlab函数库-optimset,非线性优化-matlab函数库-optimset

    创建或编辑一个最优化参数选项 句法规则 options optimset param1 value1 param2 value2 设置所有参数及其值 未设置的为默认值 options optimset optimfun 设置与最优化函数有关
  • layui左侧三级菜单2.0

    之前在layui 1 0的时候写过一个三级菜单 那时候用三级菜单还要自己扩展 与后台交互也显得麻烦 现在新版本的layui自动就可以实现三级菜单了 很多朋友在问 我就帮大家整理了一下样式大家可以改改 直接上代码 ul class layui
  • Android Geocoder(位置解析)

    Android中提供GPS定位服务 同时开发者可以对获得的位置信息进行解析 可以获得位置的详细信息 1 gps定位 在Eclipse中建立android应用程序 android sdk中提供了locationmanager来获得系统提供的定
  • Python练习(三)

    目录 传感器日志光照统计 文本字符分布 白鹿原 词频统计 习题 传感器日志光照统计 本题目附件提供了一个传感器日志文件 为文本类型 共 1 千行 每行包含了日期 时间和 4 种传感器读数值 其中 4 种传感器读数值分别是 温度 湿度 光照和
  • Spring Boot 实现接口幂等性的 4 种方案

    一 什么是幂等性 幂等是一个数学与计算机学概念 在数学中某一元运算为幂等时 其作用在任一元素两次后会和其作用一次的结果相同 在计算机中编程中 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 幂等函数或幂等方法是指可以使
  • 广点通sdk接入 _橱窗广告

    广点通sdk接入 橱窗广告 1 导入相关架包 写入相关权限和配置 android query full 0 26 7 jar GDTUnionSDK 4 8 513 jar
  • 【Elasticsearch学习笔记-基础篇3】Elasticsearch 聚集(aggregation)与过滤器(filter)

    前言 这篇主要总结一下 es 的聚集 aggregation 与过滤器 filter 不会涉及到具体的 API 操作与示例 主要总结概念性与本人理解的内容 以下是主要内容地图 在写聚集之前 我们先来看一下过滤器 过滤器 Filter 首先
  • linux安装odoo10,Centos7部署Odoo10生产环境

    该篇文章是我参考网上教程 整理出适合自己使用的方法 是通过odoo10的rpm包进行安装 一 安装odoo10 1 安装相关依赖 yum update yum install wget yum install y epel release
  • Spring Data JPA教程:审计(二)

    公众号 欢迎关注 书接上文 本文解决前面两个问题中的第二个问题 我们将为实体加上创建者和修改者的信息 首先创建一个返回授权用户信息的组件 获取授权用户信息 Spring Data JPA使用AuditorAware
  • c++基础——区分引用和指针

    目录 前言 1 引用 1 2引用的概念 1 2引用的定义 1 3引用与const 1 4引用的使用场景 2 指针 2 1概念 2 2获取对象的地址 2 3利用指针访问对象 2 3空指针 2 4野指针 2 4 1概念 2 4 2野指针的产生
  • Vs2019+Qt

    一 下载vs2019和qt 关于vs2019的配置方法不在赘述 上一篇已经讲解了 点击传送门 1 下载vs2019 直接在官网点击下载即可 是免费的 2 下载qt 在官网站下载即可 关于vs和qt安装 vs2019安装到自定义的目录就行 根
  • javascript 中函数调用方法:apply() 和 call()

    每个函数都包含两根非继承而来的方法 apply 和call 这两个方法的用途都是在特定的作用域中调用函数 实际上等于设置函数体内this对象的值 首先 apply 方法接收两个参数 一个是在其中运行函数的作用域 另一个是参数数组 其中第二个
  • Nacos - nacos-mysql.sql源文件与application.properties配置文件

    目录标题 前言 内容 初始化 MySQL 数据库 application properties 配置 前言 Nacos设置外部数据源 需要初始化nacos mysql sql源文件 修改application properties配置文件
  • android游戏开发(OpenGL ES绘制矩形平面)

    接触android将近一年了 以前学的应用开发 现在自学android游戏开发 把自己学到的分享出来一下 这也是我的第一篇博客 不说废话了 开始正文 GLRender类用于图形的渲染工作 Util类用于glrender中的数据缓冲 GLRe