案例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,不断根据旋转的角度不断渲染球,实现自转的效果
相关文章
|
9月前
|
前端开发 算法 Java
html+css+js实现点球球小游戏
html+css+js实现点球球小游戏
93 0
|
小程序
做个经典宝石方块游戏
在做了一个月的进阶课程之后,终于又可以回来做游戏了。不得不说,对于我来讲做课程要比做游戏的难的多。做出来是一回事儿,讲出来又是另一回事儿了。尤其是还希望能讲的明白,讲的浅显易懂,感觉还是很难的。不过还好,做课程这件事情也是可以练习的,比如说我现在面对镜头讲一个东西的时候,就比一年前要好很多了。
153 0
各种机械键盘轴的区别,到底什么轴好
http://www.pcviva.com/jixiejianpanshenmezhouhao.html 如果你已经清楚什么是机械键盘,也阅读了《机械键盘什么牌子好》这篇文章,你可能要挑的,就是机械键盘的轴了。
3539 0
Qt Qwdget 汽车仪表知识点拆解7 图像绘制,旋转
先贴上效果图,注意,没有写逻辑,都是乱动的
140 0
Qt Qwdget 汽车仪表知识点拆解7 图像绘制,旋转
|
前端开发 JavaScript
使用html+css+JavaScript制作抛物线小球
使用html+css+JavaScript制作抛物线小球
170 0
|
移动开发 小程序 前端开发
h5,小程序飞入购物车(抛物线绘制运动轨迹点)
小程序飞入购物车,一次性解决!
h5,小程序飞入购物车(抛物线绘制运动轨迹点)
|
4月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
41 2
|
小程序 搜索推荐 开发者
谈谈宝石方块游戏中的设计
宝石方块是在上一个俄罗斯方块工程的基础上改编的,所以制作起来很快,我只用了不到两天的时间就完成了游戏的功能,后续又花了几天的时间制作游戏的界面,优化游戏的体验。
179 0

热门文章

最新文章