实现的效果:

抛骰子

加载模型

一、OpenGL简介

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。

OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。

本文是使用OpenGL ES 3.0实现一个抛骰子的简单小程序。

二、OpenGL ES使用的简单介绍

使用OpenGL ES绘制界面和画画原理差不多,画画的时候需要画笔和画布,而OpenGL ES里的画布是GLSurfaceView,画笔是GLSurfaceView.Renderer。

我们只需要实现Render里面的几个函数:

Render函数

绘制一个三角形的流程如下:

三角形的绘制

三、项目结构介绍

Backgroud:地板,以及当作看不见的墙。

Dice:骰子。

LoadUtil:加载obj工具类。

MatrixState:矩阵工具类,矩阵相关的都在里面。

MyGLUtils:加载shader文件,贴图等等。

Normal:处理法线用的。

项目结构

四、流程步骤

1、清屏,相当于设置背景颜色,GLES20.glClearColor(0.3f,0.3f,0.3f,1.0f);

2、初始化变换矩阵MatrixState.setInitStack();

3、加载模型LoadUtil.loadDiceObj();

4、OnSurfaceChanged里面的操作:

OnSurfaceChanged

5、onDrawFrame里面绘制地板以及骰子模型。

绘制

6、加上物理引擎Jbullet。

五、模型加载及立方体贴图

加载的也是最普遍最简单的obj格式,首先要了解obj的格式,这里有个简单的obj模型,我需要用到的不多,其他的就不列出来了。

V:代表顶点。格式为V X Y Z,V后面的X Y Z表示三个顶点坐标。浮点型

VT:表示纹理坐标。上面的立方体有24个纹理坐标,因为每个三角形面的三个顶点,都需要指定一个纹理坐标。格式为VT TU TV。浮点型

VN:法向量。同样,上面立方体也有24个法向量,因为每个三角形的三个顶点都要指定一个法向量。格式为VN NX NY NZ。浮点型

F:面。面后面跟着的整型值分别是属于这个面的顶点、纹理坐标、法向量的索引。面的格式为:

f Vertex1/Texture1/Normal1 Vertex2/Texture2/Normal2 Vertex3/Texture3/Normal3

有了上面的格式,可以读取obj文件进行解析,解析出需要的数据用于绘制,计算光照等操作。

立方体贴图需要把立方体展开,然后通过计算得出每个顶点的贴图坐标,类似这样的:

贴图坐标计算

但是这些计算都不用我们来做,只要了解一下,shotoshop,maya等软件导出的obj文件都包含了这些数据。

光照处理和绘制阴影

光照的处理:

光照绘制

绘制阴影这里使用最简单的方式实现,代入代公式计算:

阴影计算

对于阴影的绘制,有更好的实现方式,分别是Shadow Volumes,Shadow Mapping这里有两篇参考文章:

物理引擎

使用Jbullet物理引擎。使用的方式大致如下:

jbullet方式

总结

1、OpenGL ES绘制基本图形的流程。

2、渲染核心FragmentShader,VertexShader的使用。

3、简单的加载模型。

4、纹理的应用以及立方体贴图。

5、光照和阴影的处理。

6、使用物理引擎。

android三个骰子摇动动画,【Android】OpenGL ES实现3D抛骰子相关推荐

  1. android 仿qq录音动画,Android实现QQ点赞效果动画 Android动画

    版权声明:本文为代码部落原创文章,转载请注明出处. 前言 点赞是现在社交app中比较常用的功能,一个小小的点赞按钮如果能加上一些有趣动画,一来告诉用户你已经点了赞(这是对一些手残党极大的福音),二来人 ...

  2. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport

    [OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循"署名-非商业用途-保持一致" ...

  3. android 设置键盘弹出动画,Android实现键盘弹出界面上移的实现思路

    1.首先说一下思路: 基本就是结合layout中ScrollView视图和AndroidManifest.xml中activity中的android:windowSoftInputMode属性配置实现 ...

  4. android 今日头条加载动画,Android 仿今日头条简单的刷新效果实例代码

    点击按钮,先自动进行下拉刷新,也可以手动刷新,刷新完后,最后就多一行数据.有四个选项卡. 前两天导师要求做一个给本科学生预定机房座位的app,出发点来自这里.做着做着遇到很多问题,都解决了.这个效果感 ...

  5. OpenGL ES绘制3D纹理贴图

    最近看了<疯狂android讲义>的图形相关的内容,结合自己的理解,整理了一下. 下图是做出来的3D纹理贴图效果,手指在屏幕滑动时,图片可以随之转动. 要实现一个纹理贴图,很简单,大致需要 ...

  6. 利用FFmpeg和OpenGL ES 实现 3D 全景播放器

    前言 我们已经利用 FFmpeg + OpenGLES + OpenSLES 实现了一个多媒体播放器,本文将基于此播放器实现一个酷炫的 3D 全景播放器. 全景播放器原理 全景视频是由多台摄像机在一个 ...

  7. OpenGL ES之3D渲染旋转的贴图立方体

    效果展示 绘制流程 一.OpenGL ES 初始化 ① 初始化上下文并设置当前上下文 /* 初始化上下文并设置当前上下文* EAGLContext 是苹果iOS平台下实现OpenGLES 渲染层* k ...

  8. android 悬浮窗的显示动画,android 悬浮窗特效

    最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画.但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处.效果图如下: 一开始考虑用自定义View来做.后来发现开线程让其 ...

  9. android图标随着进度条动画,Android开发之ProgressBar字体随着进度条的加载而滚动...

    在网上翻阅了很多关于ProgressBar滚动效果,但是始终没有找到适合项目中的这种效果,故自己写这篇文章,记录一下写作过程,给大家做一个参考.先看下最终效果效果图 我这里用的是LICEcap软件录制 ...

最新文章

  1. pandas自定义设置dataframe每个索引的标签、自定义设置索引的列名称(customize index name and index label)
  2. 内核功能导致重启_诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题
  3. 条件随机场CRF简介Introduction to Conditional Random Fields
  4. python list append tuple_Python之list、tuple、dict、set
  5. [UE4]性能优化指南(美术向)
  6. python正则表达式入门_Python中的正则表达式教程
  7. linux Centos下磁盘分区及文件系统创建与挂载
  8. 计算机电路板工作原理,PCB电路板测试仪的组成及测试原理.
  9. Translatium for Mac(多语言在线翻译工具)
  10. 开发服务器 安装 centos 8 无法进入图形安装界面 X startup failed falling back to text mode
  11. 贪心算法几个经典例子python-Python贪心算法实例小结
  12. python爬虫淘宝评论图片_简单的抓取淘宝图片的Python爬虫
  13. linux 主机支持远程唤醒_在Linux下用Wake On LAN实现远程开机
  14. 干货 | 携程风控数据仓库实践
  15. android内存dump分析,闭眼能敲,Android内存分析command
  16. 三天打鱼两天晒网python程序_三天打鱼两天晒网
  17. Java 语言使用 Observer/Observable 实现简单的观察者模式
  18. 中美程序员不完全对比
  19. 艾司博讯:拼多多拒收快递运费谁来付
  20. php农历生日计算,php实现的农历算法实例

热门文章

  1. java 字符串截取的几种方式 java获取当前路径的几种方法
  2. 需求工程小黑指北-简答速记
  3. 一种基于数据表的共享智慧的方法
  4. 天然气阶梯是按年还是按月_燃气自采暖阶梯气儿价按自然年算
  5. 热血江湖6区和服务器连接不稳定,《热血江湖》26日开放6组新服务器
  6. MIUI 11 稳定版删除系统自带且无用软件
  7. 售后技术支持管理指标实践
  8. 晒书有礼!《编写可读代码的艺术》(The Art of Readable Code)晒书有礼活动进行中...
  9. linux sysctl机制,Linux系统控制文件 /etc/sysctl.conf
  10. 烘焙行业新店开业方案