案例05:球的自转

简介: 球的自转

利用OpenGL中定时器,实现球体自转的效果,效果如图所示

微信图片_20220513234810.png

整体实现的流程图如下

微信图片_20220513234921.png


流程中的main、setupRC、DrawWireFrameBatch等函数与几何图形的绘制基本一致,这里就不再重复说明


着重说下RenderScene函数,这里包括定时器的开启及自转的实现


  • 清理缓冲区:颜色和深度缓冲区
  • 开启定时器:基于时间的变化,获得旋转的角度,此时,就相当ios中NSTimer的创建
 //1、基于时间变化 CStopWatch--NSTimer定时器
    static CStopWatch rotTimer;
    //获得角度
    float yRot = rotTimer.GetElapsedSeconds() * 60.0f;


根据模型变化,获得mvp矩阵


  • 创建4个矩阵:平移、旋转、模型视图矩阵、模型视图投影矩阵
  • 将球围绕y轴旋转,得到旋转矩阵
  • 将平移矩阵 * 旋转矩阵,得到模型视图矩阵
  • 将模型视图矩阵与投影矩阵相乘,得到mvp矩阵。这里需要注意的是,mvp矩阵相乘是有顺序的,传入API的矩阵顺序必须先传p,再传mv,否则会发现没得我们想要的就跟,其根本原因是矩阵相乘不满足交换律,所以不能打乱它的顺序
//3、创建3矩阵: 平移、旋转、模型视图矩阵、模型视图投影
    M3DMatrix44f mTranslate, mRotate, mModelView, mModelViewProjection;
    //往z轴移动-2.5f
    m3dTranslationMatrix44(mTranslate, 0, 0, -2.5f);
    //围绕y轴旋转
    m3dRotationMatrix44(mRotate, m3dDegToRad(yRot), 0, 1, 0);
    //矩阵相乘
    m3dMatrixMultiply44(mModelView, mTranslate, mRotate);
    //mvp是有顺序的:结果-p-mv,不满足交换律
//    m3dMatrixMultiply44(mModelViewProjection, viewFrustum.GetProjectionMatrix(), mModelView);
    m3dMatrixMultiply44(mModelViewProjection, mModelView, viewFrustum.GetProjectionMatrix());


  • 绘制球体
  • 交换缓冲区
  • 提交重新渲染:此时就相当于开启NSTimer,不断根据旋转的角度不断渲染球,实现自转的效果
相关文章
|
1月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
18 2
|
6月前
|
前端开发 算法 Java
html+css+js实现点球球小游戏
html+css+js实现点球球小游戏
55 0
|
6月前
|
算法 JavaScript Java
html+css+js实现打砖块小游戏
html+css+js实现打砖块小游戏
121 0
|
6月前
|
数据可视化 开发工具 开发者
羊了个羊游戏开发实战教程(1):堆叠牌的拾取
羊了个羊游戏开发实战教程(1):堆叠牌的拾取
113 0
|
小程序
做个经典宝石方块游戏
在做了一个月的进阶课程之后,终于又可以回来做游戏了。不得不说,对于我来讲做课程要比做游戏的难的多。做出来是一回事儿,讲出来又是另一回事儿了。尤其是还希望能讲的明白,讲的浅显易懂,感觉还是很难的。不过还好,做课程这件事情也是可以练习的,比如说我现在面对镜头讲一个东西的时候,就比一年前要好很多了。
135 0
|
数据可视化 开发工具 开发者
你也能做个羊了个羊游戏系列教程1:堆叠牌的拾取
嗨!大家好,我是小蚂蚁。 最近“羊了个羊”小游戏爆火。一下子让想做微信小游戏或者想学做微信小游戏的人多了很多,因为小蚂蚁一直都在长期的写微信小游戏开发的教程,以及制作微信小游戏,所以我无缘无故的也因为这波热度得到了不少的“羊毛”。 不少人建议我写个“羊了个羊”游戏的制作教程,想了一下,为什么不写呢?反正我也是要长期持续写教程的,写别的游戏也是写,那为什么不写写当下如此爆火的游戏呢?羊毛都怼到脸上了,再不薅几把就显得有点儿奇怪了。
138 0
如何做一个俄罗斯方块5:形状碰撞检测(下)
其实,两侧的碰撞判断跟我们上一节讲过的向下移动的碰撞判断原理是一样的,向下碰撞检测的是每一个方块下方的位置是否有其它方块,那么向左/右碰撞检测的就是每个方块左/右侧的位置是否有其他的方块。
319 0
|
开发工具
如何做一个俄罗斯方块4:形状碰撞检测(上)
在游戏开发中,我们所说的“碰撞”经常指的是物理碰撞,什么是物理碰撞呢?一般的在游戏开发工具中都会包含一个叫做“物理引擎”的东西,它的作用就是在游戏中模拟出现实中的物理效果。例如,我们扔一个东西,这个东西会因为重力而下落,最终落到地上,与地面发生碰撞。在游戏中,我们可以借助物理引擎,来模拟出东西下落掉到地面上的效果。当东西掉到地面上时,我们就说这个东西与地面发生了碰撞。
306 0
|
小程序 搜索推荐 开发者
谈谈宝石方块游戏中的设计
宝石方块是在上一个俄罗斯方块工程的基础上改编的,所以制作起来很快,我只用了不到两天的时间就完成了游戏的功能,后续又花了几天的时间制作游戏的界面,优化游戏的体验。
157 0