(5)添加运动
来源:互联网 发布:古兰经教学软件 编辑:程序博客网 时间:2024/05/13 10:02
在屏幕上绘制是OpenGL的基础能力,但是你也可以用其它的Android图形框架类来做,包括Canvas和Drawable。 但是OpenGL ES提供了额外的能力使得可以在三维空间移动和变换绘制对象,或者以其它独特的方式创建引人注目的用户体验。在本文中,将进行下一步使用OpenGL ES为形状添加旋转功能。
一、转动一个形状
使用OpenGL ES 2.0旋转绘图对象是相对简单的。在你的渲染器,创建另一个变换矩阵(旋转矩阵),然后将它与投影和相机视图变换矩阵合并:
public void onDrawFrame(GL10 unused) { float[] scratch = new float[16]; // 绘制背景颜色 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); // 设置camera的位置(视图矩阵) Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3f, 0f, 0f, 0f, 0f, 1f, 0.0f); // 计算投影和视图变换 Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0); // 绘制正方形 mSquare.draw(mMVPMatrix); // 为三角形创建一个旋转 // Use the following code to generate constant rotation. // Leave this code out when using TouchEvents. // long time = SystemClock.uptimeMillis() % 4000L; // float angle = 0.090f * ((int) time); Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, 1.0f); // 把旋转矩阵合并到投影和相机矩阵 Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0); // 绘制三角形 mTriangle.draw(scratch); }
(1)OpenGL基础—模型变换
其实在前一章已经提到模型变换了,它主要提供了以下几种变换函数:
1. void glTranslate{fd}(TYPE x,TYPE y,TYPE z);
把当前矩阵与一个表示移动物体的矩阵相乘。这个移动矩阵由x,y和z值指定(或者在局部坐标系系统中移动相同的数量)。
2. void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z);
把当前矩阵与一个表示移动物体(或物体的局部坐标系统)的矩阵相乘,以逆时针方向绕着从原点到点(x,y,z)的直线进行旋转。angle参数指定了旋转的度数。
3. void glScale{fd}(TYPE x,TYPE y,TYPE z);
把当前矩阵与一个表示沿各个轴对物体进行拉伸、收缩或反射的矩阵相乘。这个物体中的每个点的x、y和z坐标与对应的x、y和z参数相乘。使用局部坐标系统方法,局部坐标系统的轴将由x、y和z因子拉伸、收缩或反射,相关联的物体也根据它们进行变换。
(2)分析代码–模型变换
void setRotateM(float[] rm, int rmOffset,float a, float x, float y, float z);
与OpenGL的glRotate函数类似,差别主要是增加了偏移量 rmOffset,以及将旋转矩阵存储在参数float[] rm里。
(3)四维向量
查看坐标变换的代码时,可以发现所有相关的矩阵乘积都是四维的,而立体空间只有三个维度,主要是因为OpenGL关于颜色,位置的坐标都是四维的。
位置的w坐标其实是没有意义的,至于纹理坐标后续图像的绘制会涉及到。
- (5)添加运动
- js运动-任意值添加运动
- 网页广告添加边框运动
- Android OpenGL ES2.0编程教程系列之添加运动(五)
- 58.贝赛尔曲线初步(三) - 实现添加至购物车的运动轨迹
- Solidworks如何添加齿轮 运动副
- JavaScript运动框架(五):链式运动到完美运动
- (39)JS运动之缓冲运动
- JS 运动学习(二)缓冲运动
- 运动圈(运动社交)App
- JS 运动框架 (1)缓冲运动
- Javascript物体运动(单物体运动)
- 完美运动(链式运动)JS框架
- 8.5.5 重复运动
- 运动武装(羽毛球)
- 屏幕保护程序(球体运动)
- 跨栏运动(hurding)
- 虚线运动(图片)
- ViewPage+Fragment 滑动+点击
- 使用MAVEN3.3.9请注意,并非只支持1.7的jdk
- 9个常用iptables配置实例
- python之delete接口
- Android 功耗问题debug处理(主要是睡眠时“大”电流问题的debug方法示例)
- (5)添加运动
- CSS3选择器:属性、:root、:not、:empty、:target、first-child、last-child....
- iOS开发系列--通知与消息机制
- HorizontalScrollView的滚动到指定位置的计算方法
- laravel 常用的第三方扩展包
- jQuery on()
- 2.一个关于登录注册的练习
- javascript中new Date()的浏览器兼容性问题
- hdu2.1.2 How many prime numbers(计算素数的个数)